如果另一个Activity崩溃,Android将返回上一个Activity

时间:2011-10-03 15:39:12

标签: android exception android-activity

如果另一个Activity导致未处理的异常被抛出,有没有办法要求Android返回我的应用程序中的上一个Activity

2 个答案:

答案 0 :(得分:4)

当任何线程因未处理的异常而死亡时,您可以尝试使用Thread.setDefaultUncaughtExceptionHandler接收通知。但我不确定Dalvik是否实施了该机制。有可能你无法从UncaughtExceptionHandler开始另一个活动,因为文档没有说明线程/进程的复活。

更新

确定。我测试了它,现在我确定如果您的应用程序在UI线程中抛出异常,您将 NOT 能够使用上述技术返回到上一个Activity。发生这种情况是因为该异常会导致应用程序main looper退出,因此您的应用程序将无法处理任何进一步的UI消息。

我发现实现你想要的唯一可行方法是以下肮脏的黑客攻击:

public class MyApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    while (true) {
      try {
        Log.i("MyLooper", "Starting my looper");
        Looper.loop();
      } catch (Exception e) {
        Log.e("MyLooper", "Caught the exception in UI thread, e:", e);
        showPreviousActivity();
      }
    }
  }

  private void showPreviousActivity() {
    // your implementation of showing the previous activity
  }   
}

在AndroidManifest.xml中注册MyApplication:

<application android:name=".MyApplication">
…

showPreviousActivity()方法的实施取决于您。其中一个可能的解决方案是跟踪某些ActivityTracker类中的当前Activity实例,并从finish()代码调用当前活动showPreviousActivity方法。

答案 1 :(得分:0)

使用try-catch块来捕获异常并在那里startActivity。如果没有抓住它,你就不能去另一项活动。