本人小菜鸟一个,都说写文章会进步,所以一直想尝试。第一次写,希望大家多多包涵!哈哈
三种最简单最常用的退出APP的方法:
第一种:LauchMode设置为SingleTask
Step1:加载模式为singleTask
在AndroidManifest中将我们进入的第一个Activity(MainActivity)的加载设置为singleTask。这样MainActivity就处于栈底。
Step2:重写MainActivity的onNewIntent方法
//重写onNewIntent
@Override
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
if(intent!=null&&intent.getBooleanExtra("isExit",false)){
this.finish();
}}
Step3:退出Activity
在想退出的Activity中
Intent intent = new Intent(this,MainActivity.class);
intent.putExtra("isExit",true);
startActivity(intent);
由于我们的启动Activity的LauchMode为SingleTask,所以栈中所有位于MainActivity上层的Activity都会退出,只剩下MainActivity位于栈顶。这时候再将MainActivity退出就可以了。
第二种:设置标记位。
退出时,打开启动Acitivity,进入onNewIntent中的方法。将启动Activity上层的Activity都退出栈。在将启动Activity退出就好了。
Step1:与第一种的Step2一样。 重写启动Activity的onNewIntent方法
//重写onNewIntent
@Override
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
if(intent!=null&&intent.getBooleanExtra("isExit",false)){
this.finish();}}
Step2:退出Activity
在想退出的Activity中
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);
第三种:系统任务栈退出
// 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();
}}
总结:
这三种方法只能用于非多任务栈,即LauchMode不能为 SingleInstance。
当系统版本为5.0时用系统任务栈退出。小于5.0时用前两种方法。这里选取的第二种方法,不用设置LauchMode(非多任务栈)。
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();
}
}
第一次写文章,忘各位多多包涵,有不足的地方也请指出,共同进步。谢谢各位大佬!如果感觉好的话点个喜欢,让我也有点动力。再次感谢大家。哈哈
网友评论