android开发之关闭所有的activity的方法
作者:厚土火焰山 发布时间:2022-01-16 18:21:29
当app中打开了多个activity的时候,由于进入的比较深,所以,很多app不得不让用户一步一步退回到第一个界面(MainActivity),在一步一步退回的时候,逐个释放。
今天写kotlin来实现,在任意位置,直接退出应用的方法。
首先,每当打开一个 activity 的时候,需要有一个地方做记录,以便让一个循环遍历代码释放所有使用过的 activity 资源。
那么,建立一个数组。这里使用 MutableList,因为它有 add 和 remove 方法,很好用。
var activities:MutableList<Activity> = arrayListOf()
这个数组就是用来记录当前打开了多少个 activity 的。
那么每次打开一个新的 activity 就需要执行一个添加到这个数组的动作。
fun ActivityAdd(activity:Activity){
activities.add(activity)
}
然后来写最核心的操作,释放所有的 activity 。
首先是遍历数组,遍历到的 activity 判断是否已经为 null 了,不为 null 证明当前还没有释放掉,那么把这个 activity finish 掉。再从数组中 remove 掉。
fun ActivityFinishAll(){
for (activity:Activity in activities){
if (activity != null){
activity.finish()
activities.remove(activity)
}
}
}
这还没有完,要在每个 activity onCreate 的时候,执行数组的添加动作
ActivityAdd(this)
就写在 override fun onCreate(savedInstanceState: Bundle?) 方法内。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ActivityAdd(this)
...
}
当然,这样还不足够,还需要对单独的 activity 实现移除功能。
fun ActivityRemove(activity: Activity){
activities.remove(activity)
}
这样就具备基本功能了。
PS:其他activity方法关闭方法
四种结束当前的activity方法
//关闭当前activity方法一
finish();
//关闭当前界面方法二
android.os.Process.killProcess(android.os.Process.myPid());
//关闭当前界面方法三
System.exit(0);
//关闭当前界面方法四
this.onDestroy();
但如果已经启动了四个Activity:A,B,C和D,
在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据依然保留
Intent intent = new Intent();
intent.setClass(TableActivity.this, FrameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//设置不要刷新将要跳到的界面
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
startActivity(intent);
如果已经启动了四个Activity:A,B,C和D,
在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据不保留
Intent intent = new Intent();
intent.setClass(TableActivity.this, FrameActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
startActivity(intent);
如果已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个 Activity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码:
Intent intent1 = new Intent(TableActivity.this, FrameActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent1);
如果已经启动了四个Activity:A,B,C和D,在D Activity里,想要一次性关闭所有的activity
创建一个专门用来处理activity的类
package com.layout;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.Application;
/**
* 一个类 用来结束所有后台activity
* @author Administrator
*
*/
public class SysApplication extends Application {
//运用list来保存们每一个activity是关键
private List<Activity> mList = new LinkedList<Activity>();
//为了实现每次使用该类时不创建新的对象而创建的静态对象
private static SysApplication instance;
//构造方法
private SysApplication(){}
//实例化一次
public synchronized static SysApplication getInstance(){
if (null == instance) {
instance = new SysApplication();
}
return instance;
}
// add Activity
public void addActivity(Activity activity) {
mList.add(activity);
}
//关闭每一个list内的activity
public void exit() {
try {
for (Activity activity:mList) {
if (activity != null)
activity.finish();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.exit(0);
}
}
//杀进程
public void onLowMemory() {
super.onLowMemory();
System.gc();
}
}
在每个activity被创建时加上
SysApplication.getInstance().addActivity(this);
将该activity添加到list中去。
当你想关闭时,调用SysApplication的exit方法
//关闭整个程序
SysApplication.getInstance().exit()
来源:http://www.jianshu.com/p/52824ca130f7


猜你喜欢
- 前言最近接手了一个老项目,“愉悦的心情”自然无以言表,做开发的朋友都懂,这里就不多说了,都是泪...
- 什么是继承?多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类可以称
- 初始化方式一:@PostConstruct注解假设类UserController有个成员变量UserService被@Autowired修饰
- java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在
- 最近看到一个题目,代码如下:public static void main(String args[]) {Thread t = new T
- 第一步:项目中资源配置文件夹(resources文件夹)下先新增测试环境application-dev.yml和application-pr
- 内存分配方式简介在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈:在执行函数时,函数内局部变量的存
- import java.util.ArrayList;import java.util.HashMap;import java.util.I
- 本文实例讲述了Java基于栈方式解决汉诺塔问题。分享给大家供大家参考,具体如下:/** * 栈方式非递归汉诺塔 * @author zy *
- 自定义注解实现接口幂等性方式近期需要对接口进行幂等性的改造,特此记录下。背景在微服务架构中,幂等是一致性方面的一个重要概念。一个幂等操作的特
- 本文介绍 Spring Boot 项目中整合 ElasticSearch 并实现 CRUD 操作,包括分页、滚动等功能。之前在公司使用 ES
- 本人使用小米手机,打开qq或者微信的时候,某个权限拒绝的话,会提示你开启,点击开启会跳转到app的权限设置界面,当然了,这是国内系统深层定制
- 本文通过实例详细阐述了C++关于智能指针的概念及用法,有助于读者加深对智能指针的理解。详情如下:一、简介由于 C++ 语言没有自动内存回收机
- 1.效果图如下:2.controller层代码:import java.util.HashMap;import java.util.Map;
- 本文实例展示了C#自定义函数NetxtString实现生成随机字符串的方法,在进行C#项目开发中非常实用!分享给大家供大家参考。一、生成随机
- 利用闲余时间想自己搭建一个springboo
- 上一篇文章谈到音频剪切、混音、拼接与转码,也详细介绍cMake配置与涉及FFmpeg文件的导入: android端采用FFmpeg进行音频混
- 一、线程间的共享1.1 ynchronized内置锁用处Java支持多个线程同时访问一个对象或者对象的成员变量关键字synchronized
- java 配置MyEclipse Maven环境虽然我的大部分项目已经迁到Idea上去了,但是在写部分小的测试程序的时候还是习惯
- 简介区别String的缺点是每次字符串变量的内容发生了改变时,都必须重新分配内存。你想想,如果创建一个迭代100000次的循环,每次迭代都将