本人小菜鸟一个,都说写文章会进步,因此一直想尝试。第一次写,但愿你们多多包涵!哈哈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