这是一个普遍的问题,是从特定情况提出的,但我想获得一个一般性的答案,说明如何处理以下情况:
背景:
我有一个应用程序,它在使用一些第三方库(广告网络提供商SDK-特别是- AdMob
基于SDK Google Play Services
)。该库的功能对于应用程序并不重要。该库创建一个或多个后台工作线程。有时(非常罕见的情况),这些后台线程之一存在未处理的异常,导致应用程序崩溃。我想忽略由该库引起的所有异常,无论其原因如何:在最坏的情况下,应用程序用户将看不到广告-
这比应用程序崩溃要好得多。
由于库本身创建了后台线程-我不能仅通过try / catch来包装它们。
题
有什么方法可以捕获所有未处理的后台(非主线程)线程异常,并在这种情况下只是杀死线程并防止应用程序崩溃?
相关问题
我看到了很多问题,但是其中一些问题过于具体(无法涵盖我的情况),其他问题是指开发人员可以控制线程创建并能够使用try /
catch包装整个线程的情况。如果我仍然错过了涉及此案的相关问题,请点击链接
您需要做的就是使用BaseActivity扩展所有活动。该应用程序绝不会崩溃
BaseActivity的代码片段:
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());
}
});
}
}
当我尝试更新应用程序时,应用程序崩溃了。在我们的应用程序中,我们正在缓存中保存更新的版本,然后尝试从缓存中安装应用程序。应用程序由于android.os.fileuriexposedexception而崩溃。我发现通过intent.getData()在应用程序之外公开了日志android.os.fileuriexposedexception:file:///storage/emulated/0/t
即使在谷歌搜索了几个小时后,我也无法找出确切的问题。我已经检查了StackOverflow本身的几个答案,但未能找出问题所在。 错误跟踪如下: 主要活动代码: 更新1:我已经做了答案中建议的所有更改,但每当我单击MainActivity中的“跳过指令”按钮时,我的应用程序仍然崩溃。此外,当我从AdminLogin活动中单击“登录”按钮时,应用程序崩溃。我该怎么办? Update2:我提到了什么是N
当我在1到9之间选择一个数字并在控制台中输入一个数字时,该方法会工作并进行正确的移动。但我的问题是如何避免当我输入一个字母而不是一个数字时,程序就崩溃了。
我让我的学长给我解释,他说, 这是为了防止生产中的崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。这表明开发人员不知道他/她在做什么,并有疑问。 由于这个问题得到了很多关注,有些人误解了这个问题(可能是因为我没有清楚地表达它),我打算重新表达它。 以下是开发人员在这里所做的 > 编写并测试一个函数,它可以是一个只是初始化视图的小函数,也可以是一个复杂的函数,测试后它被包裹在块中。即使
想想一个大项目,它处理由它自己的goroutine处理的大量并发请求。碰巧代码中有一个bug,其中一个请求会因为引用为nil而引起恐慌。 在Java、C#和许多其他语言中,这最终会导致异常,异常会停止请求,而不会对其他正常的请求造成任何损害。在围棋中,这会破坏整个程序。 AFAIK,对于每一个新的go例程创建,我都必须有。这是防止整个程序崩溃的唯一方法吗? 更新:为每个gorouting创建添加调
我编写了一个Java应用程序,它使用JNI调用自定义的本机库。这个库工作得很好,我们可以通过它来处理小数据数组。但是,较大的数据数组会导致致命错误(EXCEPTION_STACK_OVERFLOW)。应用程序的核心转储显示了违规函数_chkstk。显然,当函数中有多页局部变量时,编译器会调用_chkstk。 通过快速搜索,我找到了Oracle的网站,该网站详细描述了4.1.3堆栈溢出导致的崩溃,并