android app退出 服务不退,Android应用退出的几种方式

本文分享三种简单实用的退出Android应用技巧:1)使用SingleTask模式,2)设置标记位控制栈顶Activity,3)针对不同系统版本利用任务栈。详述步骤并推荐第二种方法作为首选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

}

}

复制代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值