为什么要自定义一个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的笔记,至于上面提到场景中的功能还没实现。