android 清除所有activity
16lz
2021-12-09
android中清除所有activity的需求,还是在蛮多场景出现的,最近项目中有遇到,把解决方法贴出来,也标记下~
首先自定义一个ActivityManager管理类,用于管理栈中的activity
public class ActivityManager { private static final String TAG = "ActivityManager"; private static Stack activityStack; private static ActivityManager instance; private Activity currActivity; private ActivityManager() { } public static ActivityManager getActivityManager() { if (instance == null) { instance = new ActivityManager(); } return instance; } //退出栈顶Activity public void popActivity(Activity activity) { if(activity == null || activityStack == null) { return; } if(activityStack.contains(activity)) { activityStack.remove(activity); } currActivity = activity; //activity.finish(); //activity = null; } public void destoryActivity(Activity activity) { if(activity == null ) { return; } activity.finish(); if(activityStack.contains(activity)) { activityStack.remove(activity); } activity = null; ZLog.d(TAG, "destoryActivity================="); } //获得当前栈顶Activity public Activity currentActivity() { if(activityStack == null ||activityStack.empty()) { return null; } return activityStack.lastElement(); } //将当前Activity推入栈中 public void pushActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack(); } activityStack.add(activity); } //退出栈中除指定的Activity外的所有 public void popAllActivityExceptOne(Class cls) { while (true) { Activity activity = currentActivity(); if (activity == null) { break; } if (activity.getClass().equals(cls)) { break; } destoryActivity(activity); } } //退出栈中所有Activity public void popAllActivity() { popAllActivityExceptOne(null); } public Activity getCurrentActivity() { return currActivity; } public int getActivityStackSize() { int size = 0; if (activityStack != null) { size = activityStack.size(); } return size; }}
然后,在你的baseActivity中的两个方法添加如下方法(如果没有baseActivity,就得一个个加了)
@Overrideprotected void onPause() { super.onPause(); ActivityManager.getActivityManager().pushActivity(this);}@Overrideprotected void onResume() { super.onResume(); ActivityManager.getActivityManager().popActivity(this);}
最后,根据需求判断,在需要清除所有activity的地方,加上如下代码,我的是在baseActivity的onResume()方法中添加的
if(isRestart){ ActivityManager.getActivityManager().popAllActivity(); Intent intent = new Intent(this,LoadingActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); isRestart = false; this.finish();}
注意:清楚掉所有activity后,startActivity时需要给它加上Intent.FLAG_ACTIVITY_CLEAR_TOP,表示start的这个activity置顶,并二次清除掉所有这个activity之上的activity
更多相关文章
- Android中设置屏幕全屏两种方法:
- Android(安卓)蓝牙开发浅析
- 两种button点击后改变颜色的方法selectot和重写
- Android(安卓)View类属性及方法
- [Android][SystemUI]navigationbar 3个虚拟键隐藏与显示
- Android常用Manager
- 从J2EE转向Android的第八天-----Toast
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用