我的应用程序需要在捕获一些错误异常后重新启动。 问题是如何重新启动我的应用程序?
Context :: finish()可以删除堆栈顶部的活动,不能将新创建的主要活动带到顶部
答案 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
}
}
但您想要重新启动应用,这也需要重新启动您的应用。
坦率地说,这是一个棘手的事情,大多数应用程序都没有这样做!但如果我必须找出应用重启方案,它可能会像这样:
最后 - 一个简单的碰撞检测器:
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....
}
}
}