HarmonyOS 鸿蒙Next中如何处理异常与错误管理?

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next中如何处理异常与错误管理?

2 回复

鸿蒙提供errorManager错误处理方法,可参考以下全局异常处理demo:

EntryAbility.ets

import AbilityConstant from '[@ohos](/user/ohos).app.ability.AbilityConstant';
import hilog from '[@ohos](/user/ohos).hilog';
import UIAbility from '[@ohos](/user/ohos).app.ability.UIAbility';
import Want from '[@ohos](/user/ohos).app.ability.Want';
import window from '[@ohos](/user/ohos).window';
import errorManager from '[@ohos](/user/ohos).app.ability.errorManager';

export default class EntryAbility extends UIAbility {
 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
   //创建异常发生时的回调
   let observer: errorManager.ErrorObserver = {
     //onUnhandledException回调,回调返回的对象为一个字符串
     onUnhandledException(errorMsg) {
       console.log('testTagonUnhandledException, errorMsg: ', errorMsg);
     },
     //onException回调,回调返回的对象是一个包装好的对象,存在一些属性
     onException(errorObj) {
       console.log('testTagonException, name: ', errorObj.name);
       console.log('testTagonException, message: ', errorObj.message);
       if (typeof (errorObj.stack) === 'string') {
         console.log('testTagonException, stack: ', errorObj.stack);
       }
     }
     //以上两种回调唯一区别在于回调返回值是否封装为对象,无功能类的区别
   };
   let observerId = -1;
   //开启监听异常
   observerId = errorManager.on('error', observer);
 }

 onDestroy(): void {
   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
 }

 onWindowStageCreate(windowStage: window.WindowStage): void {
   // Main window is created, set main page for this ability
   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

   windowStage.loadContent('pages/Index', (err, data) => {
     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. Data: %{public}s', JSON.stringify(data) ?? '');
   });
 }

 onWindowStageDestroy(): void {
   // Main window is destroyed, release UI related resources
   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
 }

 onForeground(): void {
   // Ability has brought to foreground
   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
 }

 onBackground(): void {
   // Ability has back to background
   hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
 }
}

在HarmonyOS鸿蒙Next中处理异常与错误管理,可以采取以下措施:

  1. 使用错误管理接口:应用开发者可以通过errorManager模块提供的错误管理接口,及时捕获并上报异常和错误信息,以便在开发者的服务平台上定位问题。
  2. 异常监听与处理:通过实现ErrorObserver接口,监听应用中的异常事件,并在回调函数中处理异常。处理完毕后,建议采用同步退出方式,避免多次触发异常回调。
  3. 并发访问异常处理:使用同步机制如互斥锁(Mutex)确保关键代码段在同一时间仅被一个线程访问,或使用原子操作类来避免并发冲突。同时,尽量减少共享资源的使用,或对其进行合理划分。
  4. 详细日志记录:记录异常发生时的上下文信息,包括错误日志、堆栈信息等,以便进行问题排查和调试。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部