HarmonyOS 鸿蒙Next中应用启动后第一次调用setTimeout/setInterval没有回调事件
HarmonyOS 鸿蒙Next中应用启动后第一次调用setTimeout/setInterval没有回调事件
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
let appCtx = this.context.getApplicationContext();
MMKV.initialize(appCtx);
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
setTimeout(() => {
console.log('EntryAbility-onWindowStageCreate');
}, 2000);
windowStage.loadContent('pages/SplashPage', (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
}
}
比如我这个代码 在onWindowStageCreate调用setTimeout
就不会打印log
是我哪里写的不对吗?谁有办法?
更多关于HarmonyOS 鸿蒙Next中应用启动后第一次调用setTimeout/setInterval没有回调事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html
鸿蒙Next中应用首次调用setTimeout/setInterval无回调,主要涉及应用生命周期与异步任务调度机制。在应用启动初期,系统任务队列可能尚未完成初始化,导致首次设置的定时器未被正常注册。该问题与ArkTS引擎的初始化时序相关,当应用组件完成创建但事件循环未完全就绪时,会触发此现象。可通过在应用启动阶段添加微任务延迟或使用Promise.then()确保定时器注册时机。部分场景下需检查应用Ability的onWindowStageCreate回调完成状态。
更多关于HarmonyOS 鸿蒙Next中应用启动后第一次调用setTimeout/setInterval没有回调事件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在 HarmonyOS Next 中,应用启动时 onWindowStageCreate
阶段的事件循环可能尚未完全初始化,导致首次调用 setTimeout
或 setInterval
的回调无法触发。这属于系统初始化时序问题,并非代码逻辑错误。
解决方案:
将 setTimeout
延迟到页面加载完成后执行,例如在 loadContent
的回调中调用:
windowStage.loadContent('pages/SplashPage', (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
// 在页面加载完成后调用 setTimeout
setTimeout(() => {
console.log('EntryAbility-onWindowStageCreate');
}, 2000);
});
此调整可确保事件循环已就绪,从而正常触发定时器回调。