我创建了一个非常简单的项目,其中包含3个活动。
活动1的一个按钮可以转到活动2
活动2的按钮可以转到活动3
活动3发生按钮崩溃
在崩溃按钮上,我尝试设置throw exception
buttonCrash.setOnclickListener (new View.OnClickListener() {
@Override
public void onClick(View v){
throw new NullPointerException();
}
});
崩溃后,我单击重新打开,然后活动返回到活动2。如何在每次崩溃时重新启动应用程序或清除活动堆栈?
我尝试制作句柄异常类:
public class MyExceptionHandler implements Thread.UncaughtExceptionHandler {
private Activity activity;
public MyExceptionHandler(Activity a) {
activity = a;
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Intent intent = new Intent(activity, MainActivity.class);
intent.putExtra("crash", true);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(MyApplication.getInstance().getBaseContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager mgr = (AlarmManager) MyApplication.getInstance().getBaseContext().getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, pendingIntent);
activity.finish();
System.exit(2);
}
}
但是它突然重启了应用程序,即使我需要先显示崩溃对话框,也可以单击重新打开以再次打开。
答案 0 :(得分:1)
尝试定义主活动主页和默认主页。在清单的活动中的意图过滤器中添加以下代码:
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
答案 1 :(得分:0)
在每个活动过渡中添加活动清除任务标志。
Intent intent = new Intent(this,yourclass.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
答案 2 :(得分:0)
在第二个活动中添加finish()函数
答案 3 :(得分:0)
尝试对活动1使用检查传递
public static boolean DOING_PASS = false;
在DOING_PASS
的{{1}}内部,集合onStart
是真实的
activity 1
因此您可以检查@Override
void onStart(){
DOING_PASS = true;
}
内除活动1之外的所有活动
onCreate