gpt4 book ai didi

java - Android:在线程中使用未捕获的异常强制崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:52 25 4
gpt4 key购买 nike

我正在开发一个应用程序,每隔一段时间我的一个后台工作线程就会有一个或另一个未捕获的异常。这些异常会使该线程崩溃,但由于它不在 UI 线程上,因此应用程序会继续运行。 如何在后台线程中强制这些未捕获的异常使整个应用程序崩溃?如果可以使用相同的上下文崩溃信息(例如堆栈跟踪),那就太好了。

我想这样做,以便当我向测试人员发布应用程序时它不会变得无响应。相反,当后台线程有一个未捕获的异常时,应用程序将转到它的崩溃处理程序并向我发送报告(我正在使用 ACRA,但这不重要)。这比默默失败的应用要好。

最佳答案

迟到的答案,但我也在问自己同样的问题。

我们在生产环境中使用 Crashlytics,但如果该应用程序是为开发而构建的,则启用了一些断言,并且记录错误实际上会抛出它,以便我们的开发人员可以检测到任何不正确的行为。

但正如您所说,在后台线程中抛出错误不会使应用程序崩溃。

为确保应用程序在为开发而构建时立即崩溃,我们只需在主循环器上使用处理程序以在主线程上抛出异常。

看起来有点像这样:


public static void assertTrue(boolean condition, String msg) {
if (condition) {
return;
}

final IllegalStateException e = new IllegalStateException(message);
if (BuildConfig.RELEASE) {
Crashlytics.logException(e);
return;
}

Log.e("ASSERT", message, e);
if (Looper.getMainLooper() != Looper.myLooper()) {
mMainThreadHandler.post(new Runnable() {
@Override
public void run() {
throw e;
}
});
}

throw e;
}

关于java - Android:在线程中使用未捕获的异常强制崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17511070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com