在android上使用全局exception处理

有没有代码示例,或者有关如何使用Thread.setDefaultUncaughtExceptionHandler方法的教程? 基本上我试图显示一个自定义提醒对话框,每当引发exception,在我的应用程序。 是否有可能做到这一点? 我知道如果在UI线程中抛出exception,在屏幕上显示某些内容会有点棘手,但是我不知道有什么解决办法。

一个解决scheme来到这个页面的人的基本示例:)

public class ChildActivity extends BaseActivity { @SuppressWarnings("unused") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int a=1/0; } } 

类处理错误:

 public class BaseActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread paramThread, Throwable paramThrowable) { Log.e("Alert","Lets See if it Works !!!"); } }); } } 

下面是Mohit Sharma的一个变体, 它有以下改进:

  • error handling后不会导致应用程序/服务冻结
  • 让Android在你自己的事情之后进行正常的error handling

码:

 public class BaseActivity extends Activity { @Override public void onCreate() { super.onCreate(); final Thread.UncaughtExceptionHandler oldHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler( new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException( Thread paramThread, Throwable paramThrowable ) { //Do your own error handling here if (oldHandler != null) oldHandler.uncaughtException( paramThread, paramThrowable ); //Delegates to Android's error handling else System.exit(2); //Prevents the service/app from freezing } }); } } 

请记住,在设置处理程序之前检查The RuntimePermission("setDefaultUncaughtExceptionHandler") ,并确保通过抛出一个未捕获的exception,导致进程暂停,因为事情可能处于不确定状态。

不要显示任何东西,事实上UI线程可能是崩溃的,写日志和/或发送细节到服务器,而不是。 你可能想看看这个问题及其答案 。