java - 如何防止android应用程序因后台线程异常而崩溃?

标签 java android multithreading exception crash

这是一个一般性问题,是从特定场景提出的,但我想得到一个一般性的答案如何处理以下情况:

背景:

我有一个应用程序,它正在使用一些第 3 方库(广告网络提供商 SDK - 特别是 - AdMob SDK,基于 Google Play Services)。该库的功能对于应用程序并不重要。该库创建一个或多个后台工作线程。有时(非常罕见的情况)在这些后台线程之一中存在未处理的异常,导致应用程序崩溃。我想忽略由这个库引起的所有异常,不管它们的原因是什么:在最坏的情况下,应用程序用户将看不到广告——这比应用程序崩溃要好得多。

由于库本身会创建后台线程 - 我不能只用 try/catch 包装它们。

问题

有没有办法捕获所有未处理的后台(非主)线程异常,并在这种情况下终止线程,并防止应用程序崩溃?

相关问题

我看到了很多问题,但其中一些过于具体(并且没有涵盖我的情况),其他问题指的是开发人员可以控制线程创建并且能够用 try/包装整个线程的情况捕获。如果我仍然错过了相关问题,涵盖了这个案例,我将不胜感激链接

最佳答案

您需要做的就是使用 BaseActivity 扩展所有 Activity 。该应用程序在任何时候都不会崩溃

BaseActivity 的代码 fragment :

public class BaseActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
                Log.e("Error"+Thread.currentThread().getStackTrace()[2],paramThrowable.getLocalizedMessage());
            }
        });
    }
}

关于java - 如何防止android应用程序因后台线程异常而崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22978245/

相关文章:

android - thread.stop() 异常

c++ - QEventLoop 用于同步等待信号

java - Aws 物联网消息传递

java - 是否可以使用 Widget 类或原始值实现自定义的 widget map ?(数组)

java - drawPolygon 保持从起始(鼠标按下)位置到当前(鼠标拖动)位置的绘制线

android - 未找到 Google Vision 条形码库

java - 使用 @Form-RestEasy 参数绑定(bind)到 VO - JAX-Rs

java - 改造请求为特定数据模型返回 null

c++ - Windows 服务 SERVICE_WIN32_OWN_PROCESS 运行 Qt 5.10 事件循环 howto

multithreading - C++11 异步段错误