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

Android Jetpack Compose项目中App无崩溃仅UI冻结问题求助

Jetpack Compose测试Crashlytics崩溃时UI冻结的解决办法

我在Android项目中集成了Crashlytics,想测试崩溃功能,就在Jetpack Compose里通过抛出RuntimeException尝试让应用崩溃,但应用没崩溃,反而UI永久冻结,也没出现ANR,只是UI卡住。

更新的测试代码如下:

Button(
    onClick = { 
        throw RuntimeException("issue test")
    }
) {
    Text("Crash")
}

原因

Jetpack Compose的onClick回调会被框架内置的异常处理器捕获,不会直接触发进程级崩溃。Compose会尝试恢复UI状态,但这种局部异常捕获会导致UI卡住,而不是让Crashlytics捕获到完整的崩溃信息。

可行的测试方案

1. 把异常抛到主线程全局处理

绕过Compose的局部异常捕获,直接在主线程抛出未被捕获的异常:

Button(
    onClick = {
        Handler(Looper.getMainLooper()).post {
            throw RuntimeException("issue test")
        }
    }
) {
    Text("Crash")
}

2. 通过全局协程Scope抛出异常

利用协程的异常处理机制,让异常触发进程级崩溃:

Button(
    onClick = {
        CoroutineScope(Dispatchers.Main).launch {
            throw RuntimeException("issue test")
        }
    }
) {
    Text("Crash")
}

3. 直接终止进程(不推荐用于Crashlytics测试)

如果只是需要强制关闭应用,但这种方式Crashlytics可能无法收集完整的崩溃栈信息:

Button(
    onClick = {
        Process.killProcess(Process.myPid())
    }
) {
    Text("Crash")
}

验证崩溃上报

触发崩溃后重启应用,等待数分钟,即可在Crashlytics后台看到对应的崩溃记录。如果没上报,检查:

  • Crashlytics初始化是否完成(确认FirebaseApp.initializeApp(this)已调用)
  • 是否处于Debug模式?Debug环境下Crashlytics上报可能延迟或被拦截
  • 设备是否联网,崩溃信息需要网络上传

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:55:58