HarmonyOS鸿蒙Next中@ohos.app.ability.errorManager捕获js crash时,onUnhandledException的用法与期望的效果不一致
let observer: errorManager.ErrorObserver = { onUnhandledException(errorMsg) { console.error('onUnhandledException, errorMsg: ', errorMsg); }, onException(errorObj) { console.log('onException, name: ', errorObj.name); console.log('onException, message: ', errorObj.message); if (typeof(errorObj.stack) === ‘string’) { console.log('onException, stack: ', errorObj.stack); } } };
注册监听: onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { hilog.info(0x0000, ‘testTag’, ‘%{public}s’, ‘Ability onCreate’); try { reid = errorManager.on(‘error’, observer); } catch (error) { console.error(‘registerErrorObserver failed, error.code: ${error.code}, error.message: ${error.message}’); } }
在index.ets中添加点击事件: setTimeout(() => { let tempList = [‘0’, ‘1’] tempList[5].toString() }, 100)
onUnhandledException:用户未主动捕获的异常触发时会回调 onException: 应用运行异常时会回调 二者同时触发
异常被try catch捕获后没有接着往外面抛,导致无法触发ErrorObserver的异常处理回调,为正常现象,相关知识点可自行查询异常处理有关内容
更多关于HarmonyOS鸿蒙Next中@ohos.app.ability.errorManager捕获js crash时,onUnhandledException的用法与期望的效果不一致的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,@ohos.app.ability.errorManager
模块的onUnhandledException
方法用于捕获未处理的JS异常。当应用发生JS崩溃时,该方法应被触发并执行相应的处理逻辑。如果发现onUnhandledException
的用法与期望效果不一致,可能是由于异常未正确传递或处理逻辑未按预期执行。建议检查异常捕获机制和处理代码,确保其符合鸿蒙系统的规范。
关于HarmonyOS Next中errorManager的onUnhandledException回调问题,这是预期行为:
-
不加try-catch时回调不执行是正常的,因为未捕获的异常会直接导致进程终止,系统来不及触发回调。该回调设计用于捕获被try-catch包裹的异常。
-
正确用法应该是:
- 对可能出错的代码块主动添加try-catch
- 在catch中手动调用errorManager上报
- 这样既能保证异常被处理,又能触发回调
- 典型实现示例:
import errorManager from '@ohos.app.ability.errorManager';
// 注册错误观察者
errorManager.on('error', {
onUnhandledException(errMsg) {
console.error('捕获到异常:', errMsg);
}
});
try {
// 可能出错的代码
riskyOperation();
} catch(e) {
// 手动上报
errorManager.emit('error', {
message: e.message
});
}
这种设计是为了避免未处理异常导致系统不稳定,开发者需要主动处理异常情况。