IT评测·应用市场-qidao123.com

标题: HarmonyOS 5.0应用开发——UIAbility生命周期 [打印本页]

作者: 盛世宏图    时间: 2025-2-20 21:24
标题: HarmonyOS 5.0应用开发——UIAbility生命周期
【高心星出品】
     UIAbility组件

     UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。
     UIAbility组件是体系调度的根本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。例如,在支付应用中,可以将入口功能和收付款功能分别设置为独立的UIAbility。
     每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。
     对于开发者而言,可以根据具体场景选择单个还是多个UIAbility,划分发起如下:
     
     创建Ability

     

     查看ability在module.json5的设置:
                                   登录后复制                        
  1. {
  2.   "module": {
  3.     // ...
  4.     "abilities": [
  5.       {
  6.         "name": "EntryAbility", // UIAbility组件的名称
  7.         "srcEntry": "./ets/entryability/EntryAbility.ets", // UIAbility组件的代码路径
  8.         "description": "$string:EntryAbility_desc", // UIAbility组件的描述信息
  9.         "icon": "$media:icon", // UIAbility组件的图标
  10.         "label": "$string:EntryAbility_label", // UIAbility组件的标签
  11.         "startWindowIcon": "$media:icon", // UIAbility组件启动页面图标资源文件的索引
  12.         "startWindowBackground": "$color:start_window_background", // UIAbility组件启动页面背景颜色资源文件的索引
  13.         // ...
  14.       }
  15.     ]
  16.   }
  17. }
复制代码
      
                       UIAbility的生命周期

     当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的差异状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会颠末UIAbility实例的创建和烧毁,或者UIAbility实例发生了前后台的状态切换。
     

     Create状态

     Create状态为在应用加载过程中,UIAbility实例创建完成时触发,体系会调用onCreate()回调。可以在该回调中举行页面初始化操纵,例如变量定义资源加载等,用于后续的UI展示。
                                   登录后复制                        
  1. onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  2.   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  3.   // 获取跳转ability携带的数据
  4.   let params=want.parameters
  5.   let name=params!.name
  6. }
复制代码
      
                       WindowStageCreate状态

     UIAbility实例创建完成之后,在进入Foreground之前,体系会创建一个WindowStage。WindowStage创建完成后会进入onWindowStageCreate()回调,可以在该回调中设置UI加载、设置WindowStage的事件订阅。
     在onWindowStageCreate()回调中通过loadContent()方法设置应用要加载的页面,并根据需要调用on('windowStageEvent')方法订阅WindowStage的事件(获焦/失焦、切到前台/切到后台、前台可交互/前台不可交互)。
                                   登录后复制                        
  1. onWindowStageCreate(windowStage: window.WindowStage): void {
  2.   // Main window is created, set main page for this ability
  3.   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
  4.   // 监听状态状态
  5.   windowStage.on('windowStageEvent',(event)=>{
  6.     switch (event){
  7.       case window.WindowStageEventType.SHOWN:
  8.         console.info('gxxt ','切换到前台')
  9.       break;
  10.       case window.WindowStageEventType.SHOWN:
  11.         console.info('gxxt ','切换到前台')
  12.         break;
  13.       case window.WindowStageEventType.ACTIVE:
  14.         console.info('gxxt ','获得焦点')
  15.         break;
  16.       case window.WindowStageEventType.INACTIVE:
  17.         console.info('gxxt ','失去焦点')
  18.         break;
  19.       case window.WindowStageEventType.RESUMED:
  20.         console.info('gxxt ','可以交互')
  21.         break; case window.WindowStageEventType.PAUSED:
  22.       console.info('gxxt ','卡顿不可交互')
  23.       break;
  24.       case window.WindowStageEventType.HIDDEN:
  25.         console.info('gxxt ','切换到后台')
  26.         break;
  27.     }
  28.   })
  29.   // 加载页面
  30.   windowStage.loadContent('pages/Index', (err) => {
  31.     if (err.code) {
  32.       hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
  33.       return;
  34.     }
  35.     hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
  36.   });
  37. }
复制代码
      
                       Foreground和Background状态

     Foreground和Background状态分别在UIAbility实例切换至前台和切换至后台时触发,对应于onForeground()回调和onBackground()回调。
     onForeground()回调,在UIAbility的UI可见之前,如UIAbility切换至前台时触发。可以在onForeground()回调中申请体系需要的资源,或者重新申请在onBackground()中释放的资源。
     onBackground()回调,在UIAbility的UI完全不可见之后,如UIAbility切换至后台时候触发。可以在onBackground()回调中释放UI不可见时无用的资源,或者在此回调中实行较为耗时的操纵,例如状态生存等。
     例如应用在使用过程中需要使用用户定位时,假设应用已得到用户的定位权限授权。在UI显示之前,可以在onForeground()回调中开启定位功能,从而获取到当前的位置信息。
     当应用切换到后台状态,可以在onBackground()回调中制止定位功能,以节流体系的资源斲丧。
                                   登录后复制                        
  1. onForeground(): void {
  2.   // Ability has brought to foreground
  3.   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  4. }
  5. onBackground(): void {
  6.   // Ability has back to background
  7.   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  8. }
复制代码
      
                       WindowStageWillDestroy状态

     onWindowStageWillDestroy()回调在WindowStage烧毁前实行,此时WindowStage可以使用。
                                   登录后复制                        
  1. onWindowStageWillDestroy(windowStage: window.WindowStage): void {
  2. //  关闭窗口事件监听
  3. windowStage.off('windowStageEvent')
  4. }
复制代码
      
                       Destroy状态

     Destroy状态在UIAbility实例烧毁时触发。可以在onDestroy()回调中举行体系资源的释放、数据的生存等操纵。
     例如,调用terminateSelf()方法制止当前UIAbility实例,实行onDestroy()回调,并完成UIAbility实例的烧毁。
                                   登录后复制                        
  1. onDestroy(): void {
  2.   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  3. }
复制代码
      

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4