Android开发中删除指定 Activity

技术背景

在开发中,我们经常会遇到这样一种需求:首页 --》 输入账号页 --》 输入密码页 --》登录页,当走到登录页 登录后,我们会来到首页,此时,当我们按下返回按钮时,我们不希望调到 输入密码或账号页面,这个时候,我们便需要一种技术 ----- 在特定时候删除特定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 的变量那种循环即可,点到为止。

猜你喜欢

转载自blog.csdn.net/qq_41885673/article/details/114045039
今日推荐