什么是UIAbility
是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面
每一个UIAbility实例,都对应于一个最近任务列表中的任务,创建的Empty Ability模板工程会生成一个UIAbility文件
UIAbility的生命周期
UIAbility生命周期主要分为四个部分Create、Foreground、Background、Destroy四个状态 WindowStageCreate和WindowStageDestroy为窗口管理器
- Create状态,在UIAbility实例创建时触发,系统会调用onCreate回调。可以在onCreate回调中进行相关初始化操作
- WindowStage为本地窗口管理器,用于管理窗口相关的内容,例如与界面相关的获焦/失焦、可见/不可见,可以在onWindowStageCreate回调中,设置UI页面加载、设置WindowStage的事件订阅,在onWindowStageCreate(windowStage)中通过loadContent接口设置应用要加载的页面
- Foreground和Background状态,分别在UIAbility切换至前台或者切换至后台时触发,分别对应于onForeground回调和onBackground回调
- 在UIAbility实例销毁之前,有onWindowStageDestroy回调,我们可以在该回调中释放UI页面资源
- Destroy状态,在UIAbility销毁时触发。可以在onDestroy回调中进行系统资源的释放、数据的保存等操作
UIAbility的启动模式
singleton(单实例模式)
singleton启动模式为单实例模式,也是默认情况下的启动模式每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。系统中只存在唯一一个该UIAbility实例,即在最近任务列表中只存在一个该类型的UIAbility实例
- singleton启动模式的开发使用,在module.json5文件中的“launchType”字段配置为singleton即可
multiton(多实例模式)
multiton启动模式为多实例模式,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例。即在最近任务列表中可以看到有多个该类型的UIAbility实例。这种情况下可以将UIAbility配置为multiton(多实例模式)
- multiton启动模式的开发使用,在module.json5配置文件中的launchType字段配置为multiton即可
specified(指定实例模式)
specified启动模式为指定实例模式,针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)
- specified启动模式的开发使用,在module.json5配置文件中的launchType字段配置为specified即可
{
"module": {
// ...
"abilities": [
{
"launchType": "singleton",
// multiton specified
}
]
}
}
页面跳转
在页面跳转中必须要引入路由模块
import router from '@ohos.router';
参数传递
router.pushUrl({
url: 'pages/Second',
params: {
src: 'Index页面传来的数据',
}
}, router.RouterMode.Single)
参数接收
import router from '@ohos.router';
@Entry
@Component
struct Second {
@State src: string = (router.getParams() as Record<string, string>)['src'];
// 使用router.getParams()
// ...
}
页面返回
返回上一个页面
router.back();
返回指定页面
router.back({ url: 'pages/Index' });
UIAbility实践(官网案例)
项目官网gitee地址:官网Gitee地址
本地实现效果
注意层次结构与官网Gitee保持一致,要配置路由映射,具体本地实现请参考官网Gitee