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);
复制代码

第三种:系统任务栈退出

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();

    }

}
复制代码

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值