浅谈Android应用如何退出

本人小菜鸟一个,都说写文章会进步,所以一直想尝试。第一次写,希望大家多多包涵!哈哈

三种最简单最常用的退出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();

    }

}

第一次写文章,忘各位多多包涵,有不足的地方也请指出,共同进步。谢谢各位大佬!如果感觉好的话点个喜欢,让我也有点动力。再次感谢大家。哈哈

你可能感兴趣的:(浅谈Android应用如何退出)