技术背景
在开发中,我们经常会遇到这样一种需求:首页 --》 输入账号页 --》 输入密码页 --》登录页,当走到登录页 登录后,我们会来到首页,此时,当我们按下返回按钮时,我们不希望调到 输入密码或账号页面,这个时候,我们便需要一种技术 ----- 在特定时候删除特定Activity。废话不多说,上图。
技术原理自己手写一个静态的 Activity 管理池,把已启动的 Activity 管理起来,到时候想怎么删就怎么删
代码梳理第一步:封装一个 CatchActivity 类
package com.example.treetest.utils;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
public class CatchActivity {
//设置一个用来装 已开启 activity 容器
public static List<Activity> activityList = new ArrayList<>();
//判断容器中是否已存在改 activity,不存在则添加
public static void addActivity(Activity activity){
if (!activityList.contains(activity)){
activityList.add(activity);
}
}
//删除所有 activity
public static void finishAllActivity(){
for (Activity temp: activityList){
temp.finish();
}
}
//删除指定 activity
public static void finishSingleActivity(Activity activity){
if (activity != null){
if (activityList.contains(activity)){
activityList.remove(activity);
}
activity.finish();
}
}
//删除指定activity 通过类名
public static void finishSingleActivityByClass(Class<?> cls){
Activity tempActivity = null;
for (Activity temp : activityList){
if (temp.getClass().equals(cls)){
tempActivity = temp;
}
}
finishSingleActivity(tempActivity);
}
}
第二步:在需要管理的 Activity 里的 onCreate() 里调用
//往 Activity静态管理池中添加
if(!CatchActivity.activityList.contains(this)){
CatchActivity.addActivity(this);
}
第三步:选择一个“良辰吉日”删除指定Acitivity
//删除 静态activity管理池
CatchActivity.finishSingleActivityByClass(TestActivity.class);
CatchActivity.finishSingleActivityByClass(TestTireInfoActivity.class);
CatchActivity.finishSingleActivityByClass(ShowDataActivity.class);
总结
到此为止,你已经完全控制了 Activity。
注意:尽量不要用 finishAllActivity() 因为Activity虽然finish()了,可是activityList里还存在着相应的Activity,慎用!!!要用也可以,自己优化一下代码即可,我就不在这里统一讲解了哈!!!就当你们看不见:finishAllActivity()里可以不用高级语法来循环,用带 i 的变量那种循环即可,点到为止。
本文摘自 :https://blog.51cto.com/u