赞
踩
一.运行Hellow Word
二.从应用入口开始,了解用户如何与应用交互,理解应用的生命周期。
Ability是一种包含用户界面的应用组件,主要用于和用户进行交互
应用程序有以下几种交互界面形式(基于Ability实现的应用实例)
Ability作为系统调度的单元,提供窗口用于界面绘制
一个应用可以有一个Ability,也可以有多个Ability
创建一个MyApplication工程,在entryability目录下初始会生成一个Ability文件以及在pages目录下生成一个Index页面,这也是基于Ability实现的应用的入口页面。
可以在Index页面中根据业务需要实现入口页面的功能
Column(){
Text(this.message)
...
//增加一个Butto按钮,并添加一个onClick事件
Blank()
Button('Next')
...
.onClick(() => {
//点击事件处理
})
}
新建另一个页面用于跳转
在pages页面中新建一个Second.ext,可以根据业务需要完成Second页面的功能
例:从Index页面跳转到Second页面:
在Index页面中导入router路由模块
import router from '@ohos.router';
let msg:string = 'Index页面传来的数据';
通过调用routerpush()方法,将url指定为需要跳转的Second页面路径
.onClick(() => {
//点击事件处理
router.push({
url:'pages/Second',
});
})
通常在进行页面之间的跳转是会涉及到参数的传递,此时传入一个自定义参数params即可
router.push({
url:'pages/Second',
//定义参数params
parasm:{
src:msg,
}
});
在Second页面中,进行自定义参数的接收和展示,同样需要先导入router路由模块,通过调用router.getParams()方法,获取Index页面传递过来的自定义参数
@State src:string = router.getParams()?.['src'];
在Ability的使用过程中,会有多种生命周期状态。掌握Ability的生命周期,对于应用的开发非常重要。
为了实现多设备形态上的裁剪和多窗口的可扩展性,系统对组件管理和窗口管理进行了解耦。Ability的生命周期包括Create、Foreground、Background、Destroy四个状态,WindowStageCreate和WindowStageDestroy为窗口管理器(WindowStage)在Ability中管理UI界面功能的两个生命周期回调,从而实现Ability与窗口之间的弱耦合。
onCreate回调:进行相关初始化操作
import Ability from '@ohos.application.Ability'
import Window from '@ohos.window'
export default class MainAbility extends Ability {
onCreate(want, launchParam) {
// 应用初始化
...
}
...
}
例如用户打开电池管理应用,在应用加载过程中,在UI页面可见之前,可以在onCreate回调中读取当前系统的电量情况,用于后续的UI页面展示。
onWindowStageCreate回调:设置UI页面加载、设置WindowStage的事件订阅。
WindowStage为本地窗口管理器,用于管理窗口相关的内容,例如与界面相关的获焦/失焦、可见/不可见。
import Ability from '@ohos.application.Ability' import Window from '@ohos.window' export default class MainAbility extends Ability { ... onWindowStageCreate(windowStage: Window.WindowStage) { // 设置UI页面加载 // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见) ... windowStage.loadContent('pages/index', (err, data) => { ... }); } ... }
onForeground回调:Ability切换至前台时触发,申请系统需要的资源,或者重新申请在onBackground中释放的资源。
onBackground回调:Ability切换至后台时候触发,释放UI页面不可见时无用的资源,或者执行较为耗时的操作,例如状态保存等。
import Ability from '@ohos.application.Ability' import Window from '@ohos.window' export default class MainAbility extends Ability { ... onForeground() { // 申请系统需要的资源,或者重新申请在onBackground中释放的资源 ... } onBackground() { // 释放UI页面不可见时无用的资源,或者在此回调中执行较为耗时的操作 // 例如状态保存等 ... } }
onWindowStageDestroy回调:在Ability实例销毁之前,释放UI页面资源
import Ability from '@ohos.application.Ability'
import Window from '@ohos.window'
export default class MainAbility extends Ability {
...
onWindowStageDestroy() {
// 释放UI页面资源
...
}
}
onDestroy回调:在Ability销毁时触发,进行系统资源的释放、数据的保存等操作
import Ability from '@ohos.application.Ability'
import Window from '@ohos.window'
export default class MainAbility extends Ability {
...
onDestroy() {
// 系统资源的释放、数据的保存等
...
}
}
例如用户使用应用的程序退出功能,会调用Ability的terminalAbility()方法,从而完成Ability销毁。或者用户使用最近任务列表关闭该Ability实例时,也会完成Ability的销毁。
Ability有3种启动模式:singleton(单实例模式)、standard(标准模式)和specified(指定实例模式)
singleton和standard启动模式的开发使用:在module.json5文件中的“launchType”字段配置为“singleton/standard”即可
{
"module": {
...
"abilities": [
{
"launchType": "singleton/standard",
...
}
]
}
}
specified启动模式的开发使用:在module.json5文件中的“launchType”字段配置为“specified”
{
"module": {
...
"abilities": [
{
"launchType": "specified",
...
}
]
}
}
在调用startAbility()方法的want参数中,增加一个自定义参数来区别Ability实例,例如增加一个“instanceKey”自定义参数。
// 在启动指定实例模式的Ability时,给每一个Ability实例配置一个独立的Key标识 function getInstance() { ... } let want = { deviceId: "", // deviceId为空表示本设备 bundleName: "com.example.myapplication", abilityName: "MainAbility", moduleName: "device", // moduleName非必选,默认为当前Ability所在的Module parameters: { // 自定义信息 instanceKey: getInstance(), }, } // context为启动方Ability的AbilityContext context.startAbility(want).then(() => { ... }).catch((err) => { ... })
在被拉起方Ability对应的AbilityStage的onAcceptWant生命周期回调中,解析传入的want参数,获取“instanceKey”自定义参数。根据业务需要返回一个该Ability实例的字符串Key标识。如果之前启动过此Key标识的Ability,则会将之前的Ability拉回前台并获焦,而不创建新的实例,否则创建新的实例并启动。
onAcceptWant(want): string {
// 在被启动方的AbilityStage中,针对启动模式为specified的Ability返回一个Ability实例对应的一个Key值
// 当前示例指的是device Module的MainAbility
if (want.abilityName === 'MainAbility') {
return `DeviceModule_MainAbilityInstance_${want.parameters.instanceKey}`;
}
return '';
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。