android:如何在错误时正确退出应用程序

标签 android exception

我为未处理的异常添加了一个异常处理程序,以了解该应用程序在下次应用程序启动时崩溃了:

@Override
public void uncaughtException(Thread thread, Throwable ex) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("crashed", "yes");
    editor.commit();
}

我通过以下方式添加了处理程序:

Thread.setDefaultUncaughtExceptionHandler(this);

现在的问题是:由于我添加了处理程序,应用程序在出现错误时的行为有所不同:

  • 在添加处理程序之前,我收到一个弹出窗口,告诉我应用程序已崩溃。

  • 现在,添加处理程序后,应用程序就卡住了,过了一会儿,Android 会显示一个弹出窗口,告诉我应用程序不再响应,以及我是否想再等待。在我看来,这不是一件好事。有什么提示吗,如何在应用程序崩溃后正确退出?

最佳答案

您可以保存原始的异常处理程序,以便在对未处理的异常执行自定义操作后可以调用它。像这样的东西:

//Inside UncaughtExceptionHandler.java:
…
private UncaughtExceptionHandler defaultUEH;

public DefaultExceptionHandler() 
  {
  this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
  }

@Override
public void uncaughtException(Thread t, Throwable e) 
  {
  //do anything you wish about the Throwable e :getStackTrace(),getCause(),getClass()...
  //call the original uncaught exception handler:
  defaultUEH.uncaughtException(t, e);
  }

关于android:如何在错误时正确退出应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176545/

相关文章:

ios - Mac OS X 上的 CGContextShowText 异常。iOS 上正常

python - 为什么不打印异常?

c++ - 抛出一个 boost::shared_ptr< customException>

java - 在 1024ram 及以下的设备上,将字符串转换为字节会导致 java.lang.OutOfMemoryError

android - Flutter:无法解析com.android.support:support-v4:27.1.0

android - 如何在 Android 中播放在线广播流媒体 url。如何在 android 中播放 .pls 广播流媒体 url

android - 当我按退格键时,AutoCompleteTextView 是否显示了建议列表

exception - Perl 5 的鲤鱼的 raku 类似物是什么?

model-view-controller - 异常处理 - 有更好的方法吗?

java - 如何在 Java 中使用 Firebase REST API?