package com.zy.bvvm.helper; import android.app.Activity; import androidx.collection.ArrayMap; public final class ActivityStackManager { private static volatile ActivityStackManager sInstance; private ArrayMap mActivitySet = new ArrayMap<>(); // 当前 Activity 对象标记 private String mCurrentTag; private ActivityStackManager() {} public static ActivityStackManager getInstance() { // 加入双重校验锁 if(sInstance == null) { synchronized (ActivityStackManager.class) { if(sInstance == null){ sInstance = new ActivityStackManager(); } } } return sInstance; } /** * 获取栈顶的 Activity */ public Activity getTopActivity() { return mActivitySet.get(mCurrentTag); } /** * 销毁所有的 Activity */ public void finishAllActivities() { finishAllActivities((Class) null); } /** * 销毁所有的 Activity,除这些 Class 之外的 Activity */ @SafeVarargs public final void finishAllActivities(Class... classArray) { String[] keys = mActivitySet.keySet().toArray(new String[]{}); for (String key : keys) { Activity activity = mActivitySet.get(key); if (activity != null && !activity.isFinishing()) { boolean whiteClazz = false; if (classArray != null) { for (Class clazz : classArray) { if (activity.getClass() == clazz) { whiteClazz = true; } } } // 如果不是白名单上面的 Activity 就销毁掉 if (!whiteClazz) { activity.finish(); mActivitySet.remove(key); } } } } public void onActivityCreated(Activity activity) { mCurrentTag = getObjectTag(activity); mActivitySet.put(getObjectTag(activity), activity); } public void onActivityDestroyed(Activity activity) { mActivitySet.remove(getObjectTag(activity)); // 如果当前的 Activity 是最后一个的话 if (getObjectTag(activity).equals(mCurrentTag)) { // 清除当前标记 mCurrentTag = null; } } /** * 获取一个对象的独立无二的标记 */ private static String getObjectTag(Object object) { // 对象所在的包名 + 对象的内存地址 return object.getClass().getName() + Integer.toHexString(object.hashCode()); } }