You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

华为设备HMS初始化时HMSPackageManager报DeadSystemException崩溃

问题根因

这个崩溃是旧版HMS Core SDK的已知缺陷,触发点在HMS SDK自初始化的版本校验环节:SDK内部调用PackageManager.queryIntentServices查询HMS服务信息时,没有对DeadSystemException做捕获兜底。当系统出现内存紧张回收进程、HMS Core后台更新重启、系统服务binder链路临时断裂的场景时,PackageManager调用就会抛出该异常,而SDK内部逻辑跑在独立的HandlerThread上,没有异常保护,直接导致应用闪退。
该问题和Android系统版本无关,确实仅在搭载HMS Core的华为设备上复现,非华为设备不会触发HMS SDK自初始化流程,因此不会出现这类崩溃。即使业务代码没有主动调用HMS相关接口,SDK默认的自初始化逻辑也会自动执行该查询流程。

修复方案

按落地成本和效果优先级排序:

  • 优先升级所有HMS Core相关依赖到最新稳定版:华为在6.2.0.300及之后版本的SDK中已经给该查询逻辑补充了异常捕获,升级后可以直接修复问题,检查项目下所有com.huawei.hms分组的依赖,统一升级到最新正式版本即可。
  • 暂时无法升级SDK的场景,可以加全局异常拦截兜底:在Application的attachBaseContext阶段注册自定义未捕获异常处理器,识别堆栈来自HMS、异常链包含DeadSystemException的场景直接拦截,不需要执行闪退逻辑。参考实现代码:
// 先持有系统默认的异常处理器
private Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> {
        if (isHmsDeadSystemException(throwable)) {
            // HMS触发的系统服务死亡异常属于偶发问题,拦截即可,下次启动可恢复正常
            return;
        }
        // 其余异常交给默认处理器处理
        defaultHandler.uncaughtException(thread, throwable);
    });
}

private boolean isHmsDeadSystemException(Throwable throwable) {
    if (throwable == null) return false;
    // 遍历异常链判断是否包含DeadSystemException
    Throwable cur = throwable;
    boolean hasDeadSystemEx = false;
    while (cur != null) {
        if (cur instanceof android.os.DeadSystemException) {
            hasDeadSystemEx = true;
            break;
        }
        cur = cur.getCause();
    }
    if (!hasDeadSystemEx) return false;
    // 校验异常堆栈是否归属HMS SDK
    for (StackTraceElement element : throwable.getStackTrace()) {
        if (element.getClassName().startsWith("com.huawei.hms")) {
            return true;
        }
    }
    return false;
}
  • 如果项目本身没有用到任何HMS Core能力,可以直接移除HMS相关依赖彻底规避问题。注意部分第三方SDK(推送、支付、地图类居多)会间接传递引入HMS依赖,这种情况可以在gradle中配置排除传递依赖:
implementation('com.example:third-party-sdk:1.0.0') {
    exclude group: 'com.huawei.hms'
}
补充说明

DeadSystemException本身是系统服务临时不可用的偶发异常,即使不做处理,用户下次冷启动应用时绝大多数场景都能正常运行,不需要额外加业务兼容逻辑,只要做好拦截避免闪退即可。

内容的提问来源于stack exchange,提问作者pilot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:21:34