当前位置:   article > 正文

应用程序开发(ArkTS)_arkts单例模式

arkts单例模式

UIAbility

定义

用于和用户交互,是系统调度的单元,为应用提供窗口,包括在最近任务栏中存在的窗口也是UIAbility的实例。类似于Activity

特点

1.每一个UIAbility实例,都对应一个最近任务栏的任务。

2.一个app中可以存在多了UIAbility

3.一个UIAbility可以对应多个页面,比如浏览器应用。//类比Fragment

页面跳转 :

        页面间跳转包含两种情况:1.仅跳转页面;2.跳转页面并携带参数

跳转页面(不含参数)

        页面间的跳转通过路由router模块实现,借助url找到目标页面,并实现跳转.类比思考ARouter(Android)。

路由页面参考网址:文档中心

  1. 页面跳转代码示例:
  2. import router from '@ohos.router' //导包
  3. router.pushUrl({
  4. url: '目标页面url'
  5. })

 跳转页面并传递参数

        页面跳转并传递参数,代码示例:

  1. import router from '@ohos.router'
  2. router.pushUrl({
  3. url: '目标页面地址',
  4. params: {
  5. data1: '参数'//多个参数的在后续补充,中间以逗号分隔
  6. }
  7. })

         同理,UIAbility的跳转也可以设置跳转模式(单例等),只需要在pushUrl的参数中补充mode参数即可

代码示例如下:

  1. import router from '@ohos.router'
  2. router.pushUrl({
  3. url: '目标页面地址',
  4. params: {
  5. data1: '参数'//多个参数的在后续补充,中间以逗号分隔
  6. },
  7. router.RouterMode.Standard
  8. })

关于跳转的模式,目前仅包含两种:

1.Standard:多实例模式.默认情况下的模式,目标页面会被添加到页面栈顶,无论栈中是否已经存在相同url的页面

2.Single:单实例模式。如果目标页面已存在,则该url页面会被移动至栈顶,不存在时,则会按照多实例模式跳转。

 另外,Harmony同时存在另外一种跳转方式,releaseUrl,传参与pushUrl雷同,不同点是:通过这种方式,是用应用内的某个页面替换当前页面,并销毁被替换的页面。

页面接收参数和返回       

        接收参数:通过router.getParams()方法获取。

        返回:router.back()

页面返回注意事项:

        1.调用back可以返回的前提条件是:被返回的页面在页面栈中存在,如果不存在,则无法返回(调用router.clear())。

        2.back是可以返回到指定页面的。代码示例:router.back(目标url);

        3.页面返回是可以添加返回提示框的,但进针对当前页面生效。代码示例:router.enableBackPageAlert()。注意需要在router.back()前调用。

        4.页面返回的提示框功能关闭借助“router.disableAlertBeforeBackPage()”实现。

        5.back()方法不会新建页面,返回的是原来的页面,原来页面中的@State声明的变量也不会重复声明,同时,也不会触发页面的aboutToAppera()生命周期。

生命周期

        为了实现多设备形态上的裁剪和多窗口的可扩展性,系统对组件管理和窗口管理进行了解耦。因此UIAbility的生命周期可以整理如下:

UIAbility的生命周期

  1. create:UIAbility在实例创建时触发,系统会调用onCreate回调,可以进行初始化相关操作。
  2. Foreground:切换到前台时触发(也就是页面可见之前)。可以在onForeground回调中申请系统需要的资源,或者重新申请在onBackground中释放的资源。
  3. Background:切换到后台时触发(也就是页面完全不可见之后)。因此可以用于释放一些需要释放(页面不可见时用不到)的资源、或耗时的操作等。
  4. Destory:UIAbility销毁时触发。可以进行系统资源的释放。比如调用Context中的terminalSelf()、任务栏杀死时会触发。

Window的生命周期

window的生命周期由WindowStage管理,用于管理窗口相关的内容。eg:界面可见/不可见、当前是否获取焦点等。

每一个UIAbility实例都对应持有一个WindowStage实例。

  1. WindowStageCreate:设置UI页面加载、设置WindowStage的事件订阅。Foreground之前被调用。
  2. WindowStageDestory:释放UI页面资源,在UIAbility实例销毁之前调用。

 结合上述描述,UIAbility的生命周期整体如下图示:(图源官网)

 启动模式

        UIAbility当前支持三种模式,singleton(单实例模式)、multiton(多实例模式)和specified(指定实例模式)。但路由跳转模式时(pushUrl方法调用传参时使用的枚举类RouterMode(API version9开始支持))仅支持两种参数Standard和Single。

startAbility()启动模式对比说明
启动模式特点
singleton(单实例模式)默认情况下的启动模式(startAbility()方法跳转页面)系统中只存在唯一一个该UIAbility实例
multiton(多实例模式)每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例
specified(指定实例模式)指定实例模式,针对一些特殊场景使用
路由跳转的启动模式对比
启动模式特点
Standard多实例模式(默认的跳转模式)
Single单实例模式

网址参考:华为开发者学堂

留个疑问:官网在官方学习视频中讲解的跳转模式是路由跳转模式,那为什么在官方文档在讲解启动模式时讲解的是startAbility的启动模式?哪一种才是官方推荐的?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/337271
推荐阅读
相关标签
  

闽ICP备14008679号