查看: 97|回复: 1

OpenHarmony 4.0 Release 循环拉起应用功能

[复制链接]

1

主题

6

回帖

17

积分

新手上路

积分
17
发表于 2025-3-30 16:58:53 | 显示全部楼层 |阅读模式
需求场景:有部分应用在异常退出时希望重新被启动,无需用户手动操作。

需求分析:

我们还是可以使用在某个常驻服务来实现拉起操作,还是走launcher创建窗口时来实现。此时我们需要去监听某个应用被杀死的状态,刚好 appManager.on(‘applicationState’, applicationStateObserver)这个接口实现了监听应用的状态,并在onProcessDied中可以查询到指定应用的bundleName列表,依赖来实现再次拉起指定应用的场景。
代码示例:
  1.             //新增需求,xxx应用被杀掉后需要再此被拉起
  2.             let applicationStateObserver: appManager.ApplicationStateObserver = {
  3.               onForegroundApplicationChanged(appStateData) {
  4.                 console.log(`[appManager] onForegroundApplicationChanged: ${JSON.stringify(appStateData)}`);
  5.               },
  6.               onAbilityStateChanged(abilityStateData) {
  7.                 console.log(`[appManager] onAbilityStateChanged: ${JSON.stringify(abilityStateData)}`);
  8.               },
  9.               onProcessCreated(processData) {
  10.                 console.log(`[appManager] onProcessCreated: ${JSON.stringify(processData)}`);
  11.               },
  12.               onProcessDied(processData) {
  13.                 console.log(`[appManager] onProcessDied: ${JSON.stringify(processData)}`);
  14.                 if(processData.bundleName === 'com.xx.xxx'){
  15.                   if (systemparameter.getSync('persist.autostart.xxx', '0') === '1') {
  16.                     setTimeout(() => {
  17.                       let want = {
  18.                         "deviceId": "",
  19.                         "bundleName": "com.xx.xxx",
  20.                         "abilityName": "EntryAbility"
  21.                       };
  22.                       globalThis.desktopContext.startAbility(want).then(() => {
  23.                         Log.showInfo(TAG, '[appManager] OneFan processData startAbility success');
  24.                       }).catch((error) => {
  25.                         Log.showInfo(TAG, '[appManager] OneFan processData startAbility failed');
  26.                       })
  27.                     }, 500)
  28.                   } else {
  29.                     Log.showInfo(TAG, '[appManager] OneFan processData persist.autostart.dts err');
  30.                   }
  31.                 }
  32.               },
  33.               onProcessStateChanged(processData) {
  34.                 console.log(`[appManager] onProcessStateChanged: ${JSON.stringify(processData)}`);
  35.               }
  36.             };
  37.             try {
  38.               const observerId = appManager.on('applicationState', applicationStateObserver);
  39.               console.log(`[appManager] observerCode: ${observerId}`);
  40.             } catch (paramError) {
  41.               let code = (paramError as BusinessError).code;
  42.               let message = (paramError as BusinessError).message;
  43.               console.error(`[appManager] error: ${code}, ${message} `);
  44.             }
  45.             //新增需求,xxx应用被杀掉后需要再此被拉起
复制代码
而相对于服务型应用来说,我们只需要在install_list_capability.json及签名中配置keepAlive为true即可。

0

主题

5

回帖

10

积分

新手上路

积分
10
发表于 2025-3-30 16:59:12 | 显示全部楼层
学会了学会了谢谢🙏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表