android应用程序如何在捕获异常后重启?

时间:2014-07-11 11:25:56

标签: android android-activity restart

我的应用程序需要在捕获一些错误异常后重新启动。 问题是如何重新启动我的应用程序?

Context :: finish()可以删除堆栈顶部的活动,不能将新创建的主要活动带到顶部

2 个答案:

答案 0 :(得分:2)

如果重新启动您的应用程序基本上意味着启动您的LAUNCHER活动,那么您只需使用以下标志为您的第一个活动启动新意图:

homeActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);

答案 1 :(得分:0)

由于引发异常而杀死应用程序很容易:只是不要抓住()它。

Android将通过杀死您的应用来响应未捕获的异常。

如果您确实发现了这些错误的异常,请确保在处理后重新检查它们:

class doSomething(){

  try { 
       do something risky
  } catch (AdError e)
       record error to log , or notify server

       throw e; // <------- and rethrow the exception
  }

}


但您想要重新启动应用,这也需要重新启动您的应用。

坦率地说,这是一个棘手的事情,大多数应用程序都没有这样做!

但如果我必须找出应用重启方案,它可能会像这样:

  • 在应用启动时声明一个警报,它会定期(例如每X秒)唤醒并检查应用程序是否已崩溃
  • 在优雅下降应用程序之前,警报已关闭
  • 应用程序崩溃之后,警报(未关闭!)将被唤醒并检测到应用程序在之前的运行中已崩溃,并将通过重新启动来响应。


最后 - 一个简单的碰撞检测器


class MyFirstActivity  {

     void onCreate() {
          other staff....

          SharedPreferences preferences = getSharedPreferences("CRASH_INDICATOR",      MODE_PRIVATE);
          SharedPreferences.Editor editor = preferences.edit();
          editor.putBoolean("HAD_CRASHED", true); // <------------ mark as crashed
          editor.commit();          
     }

}




class MyLastActivity  {

     void onStop() {   // <----------------- app is now gracefully closing
          other staff....

          SharedPreferences preferences = getSharedPreferences("CRASH_INDICATOR",MODE_PRIVATE);
          SharedPreferences.Editor editor = preferences.edit();
          editor.putBoolean("HAD_CRASHED", false); // <------------ mark as NOT crashed
          editor.commit();          
     }

}


class Alarmreceiver { // <----- check whether app had crashed in prior run and, if so, react
      onReceive() {
           SharedPreferences preferences = getSharedPreferences("CRASH_INDICATOR", MODE_PRIVATE);
           boolean hadCrashed = preferences.getBoolean("HAD_CRASHED", false);
           if (hadCrashed ) {
                handle....
           }
      }

}