Android自定义一个ActivityManager管理类笔记

本文介绍了在Android开发中,为何需要自定义ActivityManager类来辅助管理Activity。通过自定义管理类,可以在适当时候删除指定Activity,例如在完成注册流程后,一键返回到先前的新闻阅读页面,提供更流畅的用户体验。

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

       为什么要自定义一个ActivityManager类,首先Android中每当创建一个Activity的时候系统都有一个管理类(APPManager)去自动帮我们管理(什么时候销毁,什么时候从栈中移除)。但实际开发中会遇到一个这样的场景,比如:你在看某条新闻的时候,想发表评论,然后经过一系列的注册界面,注册成功后再次跳转到这条新闻的页面。那么如果自定义了一个ActivityManager管理类以后,就可以在里面随意删除Activity从栈中把它移除掉,当你点击注册成功后,可以把一系列注册的界面都移除掉,露出你正在看的那条新闻页面。

         ActivityManager类:

 

/**
 * Created by yaoming on 2017/5/28.
 * 统一应用程序中所有的Activity的栈管理(单例)
 * 涉及到activity的添加、删除指定、删除当前、删除所有、返回栈大小的方法
 */

public class ActivityManager {
    //单例模式:饿汉
    public ActivityManager() {

    }

    private static ActivityManager activityManager = new ActivityManager();

    public static ActivityManager getActivityManager() {
        return activityManager;
    }

    //提供栈对象
    private static Stack<Activity> activityStack = new Stack<>();

    //把Activity添加到栈里面
    public void addActivityManager(Activity activity) {
        if (activity != null) {
            activityStack.add(activity);
        }
    }

    //删除当前的activity
    public void removeCurrent() {
        //方式一:
//        Activity activity = activityStack.get(activityStack.size() - 1);
//        activity.finish();
//        activityStack.remove(activityStack.size() - 1);

        //方式二:
        Activity activity = activityStack.lastElement();
        activity.finish();
        activityStack.remove(activity);
    }

    //移除指定的Activity
    public void remove(Activity activity) {
        if (activity != null) {

            for (int i = activityStack.size() - 1; i >= 0; i--) {
                Activity currentActivity = activityStack.get(i);
                if (currentActivity.getClass().equals(activity.getClass())) {
                    currentActivity.finish();//销毁当前的activity
                    activityStack.remove(i);//从栈空间移除
                }
            }
        }
    }

    //移除所有的Activity
    public void removeAll(Activity activity) {
        for (int i = activityStack.size() - 1; i >= 0; i--) {
            activity.finish();
            activityStack.remove(i);
        }
    }

    //返回栈大小
    public int size() {
        return activityStack.size();
    }
}



  //其他Activity的OnCreate()中调用
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    //当前的Activity加到ActivityManager类中
    ActivityManager.getActivityManager().addActivityManager(this);




//移除
   Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);
   startActivity(intent);
//   finish();
   ActivityManager.getActivityManager().remove(WelcomeActivity.this);


以上只是一个自定义ActivityManager的笔记,至于上面提到场景中的功能还没实现。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值