OpenHarmony菜单闪退的定位与修复步骤
一、快速定位思路
二、常见根因与修复要点
三、最小可用的自恢复与日志方案
import AbilityStage from '@ohos.app.ability.AbilityStage';
import appRecovery from '@ohos.app.ability.appRecovery';
export default class MyAbilityStage extends AbilityStage {
onCreate() {
appRecovery.enableAppRecovery(
appRecovery.RestartFlag.ALWAYS_RESTART,
appRecovery.SaveOccasionFlag.SAVE_WHEN_ERROR | appRecovery.SaveOccasionFlag.SAVE_WHEN_BACKGROUND,
appRecovery.SaveModeFlag.SAVE_WITH_FILE
);
}
}
import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
import { BusinessError } from '@ohos.base';
export default class EntryAbility extends UIAbility {
private storage: LocalStorage | undefined = undefined;
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
if (launchParam.launchReason === AbilityConstant.LaunchReason.APP_RECOVERY) {
// 从持久化恢复
this.storage = new LocalStorage();
const data = this.storage.getOrCreate('menuState', '{}');
// TODO: 恢复菜单状态与页面栈
console.info('Recovered menu state:', data);
} else {
this.storage = new LocalStorage();
}
}
onSaveState(recover: (data: string) => void) {
try {
// 仅保存必要轻量数据(避免大对象/不可序列化对象)
const menuState = JSON.stringify({ selected: 'item1', scrollTop: 120 });
recover(menuState); // 框架持久化
} catch (e) {
console.error('Save menu state failed:', (e as BusinessError).message);
}
}
}
import faultLogger from '@ohos.app.ability.faultLogger';
import { BusinessError } from '@ohos.base';
faultLogger.queryLastFault('your.bundle.name', (err: BusinessError, fault: any) => {
if (err) {
console.error('queryLastFault failed:', err.message);
return;
}
console.info('Last fault:', JSON.stringify(fault));
});
说明:上述自恢复会在JS Crash/App Freeze等场景触发状态保存与自动重启;注意两次重启间隔应大于1分钟,否则只会退出不再重启。
四、团结引擎项目的专项检查
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。