赞
踩
用于和用户交互,是系统调度的单元,为应用提供窗口,包括在最近任务栏中存在的窗口也是UIAbility的实例。类似于Activity
1.每一个UIAbility实例,都对应一个最近任务栏的任务。
2.一个app中可以存在多了UIAbility
3.一个UIAbility可以对应多个页面,比如浏览器应用。//类比Fragment?
页面间跳转包含两种情况:1.仅跳转页面;2.跳转页面并携带参数;
页面间的跳转通过路由router模块实现,借助url找到目标页面,并实现跳转.类比思考ARouter(Android)。
路由页面参考网址:文档中心
- 页面跳转代码示例:
- import router from '@ohos.router' //导包
-
- router.pushUrl({
- url: '目标页面url'
- })
-
-
页面跳转并传递参数,代码示例:
- import router from '@ohos.router'
-
- router.pushUrl({
- url: '目标页面地址',
- params: {
- data1: '参数'//多个参数的在后续补充,中间以逗号分隔
- }
- })
同理,UIAbility的跳转也可以设置跳转模式(单例等),只需要在pushUrl的参数中补充mode参数即可
代码示例如下:
- import router from '@ohos.router'
-
- router.pushUrl({
- url: '目标页面地址',
- params: {
- data1: '参数'//多个参数的在后续补充,中间以逗号分隔
- },
- router.RouterMode.Standard
- })
关于跳转的模式,目前仅包含两种:
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的生命周期可以整理如下:
- create:UIAbility在实例创建时触发,系统会调用onCreate回调,可以进行初始化相关操作。
- Foreground:切换到前台时触发(也就是页面可见之前)。可以在onForeground回调中申请系统需要的资源,或者重新申请在onBackground中释放的资源。
- Background:切换到后台时触发(也就是页面完全不可见之后)。因此可以用于释放一些需要释放(页面不可见时用不到)的资源、或耗时的操作等。
- Destory:UIAbility销毁时触发。可以进行系统资源的释放。比如调用Context中的terminalSelf()、任务栏杀死时会触发。
window的生命周期由WindowStage管理,用于管理窗口相关的内容。eg:界面可见/不可见、当前是否获取焦点等。
每一个UIAbility实例都对应持有一个WindowStage实例。
- WindowStageCreate:设置UI页面加载、设置WindowStage的事件订阅。Foreground之前被调用。
- WindowStageDestory:释放UI页面资源,在UIAbility实例销毁之前调用。
结合上述描述,UIAbility的生命周期整体如下图示:(图源官网)
UIAbility当前支持三种模式,singleton(单实例模式)、multiton(多实例模式)和specified(指定实例模式)。但路由跳转模式时(pushUrl方法调用传参时使用的枚举类RouterMode(API version9开始支持))仅支持两种参数Standard和Single。
启动模式 | 特点 |
singleton(单实例模式) | 默认情况下的启动模式(startAbility()方法跳转页面)系统中只存在唯一一个该UIAbility实例 |
multiton(多实例模式) | 每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例 |
specified(指定实例模式) | 指定实例模式,针对一些特殊场景使用 |
启动模式 | 特点 |
Standard | 多实例模式(默认的跳转模式) |
Single | 单实例模式 |
网址参考:华为开发者学堂
留个疑问:官网在官方学习视频中讲解的跳转模式是路由跳转模式,那为什么在官方文档在讲解启动模式时讲解的是startAbility的启动模式?哪一种才是官方推荐的?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。