本人小菜鳥一個,都說寫文章會進步,因此一直想嘗試。第一次寫,但願你們多多包涵!哈哈bash
在AndroidManifest中將咱們進入的第一個Activity(MainActivity)的加載設置爲singleTask。這樣MainActivity就處於棧底。app
//重寫onNewIntent
@Override
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
if(intent!=null&&intent.getBooleanExtra("isExit",false)){
this.finish();
}
}
複製代碼
在想退出的Activity中ide
Intent intent = new Intent(this,MainActivity.class);
intent.putExtra("isExit",true);
startActivity(intent);
複製代碼
因爲咱們的啓動Activity的LauchMode爲SingleTask,因此棧中全部位於MainActivity上層的Activity都會退出,只剩下MainActivity位於棧頂。這時候再將MainActivity退出就能夠了。ui
退出時,打開啓動Acitivity,進入onNewIntent中的方法。將啓動Activity上層的Activity都退出棧。在將啓動Activity退出就行了。this
//重寫onNewIntent
@Override
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
if(intent!=null&&intent.getBooleanExtra("isExit",false)){
this.finish();}
}
複製代碼
在想退出的Activity中spa
Intent intent = new Intent(this,MainActivity.class);
intent.putExtra("isExit",true);
//設置標記,將MainActivity以及MainActivity上層的Activity銷燬。
從新打開一個MainActivity(走MainActivity的onCreate方法)
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//若是LauchMode爲SingleTask或者SingleTop再或者添加標記位Intent.FLAG_ACTIVITY_SINGLE_TOP。
那麼MainActivity就不會銷燬,而是進入onNewIntent()方法。
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
複製代碼
ActivityManager activityManager=(ActivityManager)context.getApplicationContext()
.getSystemService(Context.ACTIVITY_SERVICE);
複製代碼
List appTaskList = activityManager.getAppTasks();
複製代碼
for (ActivityManager.AppTask appTask : appTaskList) {
appTask.finishAndRemoveTask();
}}
複製代碼
總結:code
這三種方法只能用於非多任務棧,即LauchMode不能爲 SingleInstance。ci
當系統版本爲5.0時用系統任務棧退出。小於5.0時用前兩種方法。這裏選取的第二種方法,不用設置LauchMode(非多任務棧)。get
if (Build.VERSION.SDK_INT>=21){
// 1. 經過Context獲取ActivityManager
ActivityManager activityManager = (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
// 2. 經過ActivityManager獲取任務棧
List appTaskList = activityManager.getAppTasks();
// 3. 逐個關閉Activity
for (ActivityManager.AppTask appTask : appTaskList) {
appTask.finishAndRemoveTask();
}
} else {
Intent intent=new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("isExit",true);
context.startActivity(intent);
}
複製代碼
將啓動Activity的onNewIntent重寫
//重寫onNewIntent
@Override
protected void onNewIntent(Intentintent){
super.onNewIntent(intent);
if(intent!=null&&intent.getBooleanExtra("isExit",false)){
this.finish();
}
}
複製代碼
第一次寫文章,忘各位多多包涵,有不足的地方也請指出,共同進步。謝謝各位大佬!若是感受好的話點收藏或者喜歡,讓我也有點動力。再次感謝你們。哈哈。string