HarmonyOS如何实现重启应用?

如题:HarmonyOS如何实现重启应用?

阅读 889
1 个回答

重启应用使用restartApp接口,不需要再用应用恢复提供的重启接口。https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-application-applicationcontext-V5\#applicationcontextrestartapp12

以下内容请参考:

1、module.json5中配置支持恢复的Ability。

"abilities": [
{
  "name": "EntryAbility",
"recoverable": true,
}
]

2、新建AbilityStage类,在onCreate中设置启动恢复参数。

import appRecovery from '@ohos.app.ability.appRecovery';
import AbilityStage from '@ohos.app.ability.AbilityStage';
import Want from '@ohos.app.ability.Want';
export default class MyAbilityStage extends AbilityStage {
  onCreate(): void {
    appRecovery.enableAppRecovery(
      appRecovery.RestartFlag.ALWAYS_RESTART,
      appRecovery.SaveOccasionFlag.SAVE_WHEN_ERROR,
      appRecovery.SaveModeFlag.SAVE_WITH_FILE
    );
    let want: Want ={
      bundleName:'com.example.pagesrouter',
      abilityName:"EntryAbility"
    }
    appRecovery.setRestartWant(want)
  };
};

3、在module.json5中的srcEntry中 配置新建的Ability,作为应用启动的ability。

"module": {
  "name": "entry",
  "srcEntry": "./ets/entryability/MyAbilityStage.ets",

4、页面调用。

appRecovery.restartApp();
onClick(() => {
  appRecovery.restartApp();
})

内置CD 60秒内只能重启1次。

如果appRecovery不能满足需求,可以备份还原方案1。参考如下方案2,在terminateSelf()方法的回调中拉起自己的ability,可以多次重启。

//方案二
this.context.terminateSelf(()=>{
  Logger.info("应用即将被关闭");
  let want: Want ={
    bundleName:'com.example.pagesrouter',
    abilityName:"EntryAbility"
  }
  this.context.startAbility(want).then(()=>{
    Logger.info("应用被启动");
  })
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进