【问题标题】:Android return to a previous Activity if another Activity crashes如果另一个 Activity 崩溃,Android 会返回到上一个 Activity
【发布时间】:2011-11-30 00:51:57
【问题描述】:

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

【问题讨论】:

    标签: android exception android-activity


    【解决方案1】:

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

    更新

    好的。我对其进行了测试,现在我确信如果您的应用程序在 UI 线程中抛出异常,您将能够使用上述技术返回到以前的 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 实例,并从 showPreviousActivity 代码中调用当前的活动 finish() 方法。

    【讨论】:

    • 如果应用程序有超过 1 个 Activity 在运行,getApplicationContext() 仍将提供有效的 Context。然后,您可以从已注册的 UncaughtExceptionHandler 内部调用 startActivity() ;)
    • 如果你使用 UncaughtExceptionHandler 并且 UI 线程中发生异常,那么 startActivity() 将无济于事,因为主循环器已经死了。
    【解决方案2】:

    使用try-catch 块来捕获异常并在那里使用startActivity。没有抓住就不能去参加其他活动。

    【讨论】:

    • atm也不例外。如果我有一个未处理的异常,我想编写代码,我不知道它会在哪里。
    • 你需要弄清楚,当活动崩溃时,它会关闭应用程序。
    • 这是一个假设场景,因为它目前没有崩溃
    • 那么答案是否定的。当活动崩溃时,您将失去控制,除了重新启动应用程序之外别无选择......
    猜你喜欢
    • 2017-11-17
    • 2014-12-20
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    相关资源
    最近更新 更多