Android应用退出的几种方式

1,811 阅读2分钟

本来在简书发过一次,但是由于饱醉豚,搬家到掘金了。

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

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

第三种:系统任务栈退出

Step1. 通过Context获取ActivityManager

ActivityManager activityManager=(ActivityManager)context.getApplicationContext()
                                    .getSystemService(Context.ACTIVITY_SERVICE);

Step2. 通过ActivityManager获取任务栈

    List appTaskList = activityManager.getAppTasks();

Step3. 逐个关闭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();

    }

}

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