/** *DongHongyu */ package com.martin.simpledevelop.activity; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import android.app.Activity; import com.martin.simpledevelop.utils.log.SaLogUtils; /** * @Description 管理Activity的栈 * @File SaActivityTack.java * @Package com.martin.view.activity * @Date 2015年6月15日下午7:39:54 * @Author Donghongyu 1358506549@qq.com * @Version v1.0.0 */ public class SaActivityTack { /** 日志的标记 */ public final String TAG = getClass().getName(); /***/ public static SaActivityTack mActivityTask = new SaActivityTack(); /** 存放应用开启点开的Activity */ public List<Activity> mActivityList = new ArrayList<Activity>(); public static SaActivityTack getInstanse() { return mActivityTask; } /** * 向Activity堆栈添加实例<br> * * * * @param activity */ public void addActivity(Activity activity) { SaLogUtils.i(TAG, TAG + "-----addActivity-----" + activity); mActivityList.add(activity); } /** * 移除指定的Activity实例 * * @param activity */ public void removeActivity(Activity activity) { SaLogUtils.i(TAG, TAG + "-----removeActivity-----" + activity); mActivityList.remove(activity); } /** * 完全退出应用程序 */ public void exitApp() { // 循环取出堆栈的Activity实例,依次销毁 while (mActivityList.size() > 0) { mActivityList.get(mActivityList.size() - 1).finish(); } SaLogUtils.i(TAG, TAG + "-----exitApp-----" + mActivityList.size()); // 正常关闭程序 System.exit(0); } /** * 根据Activity名称查询堆栈中是否已经注册该界面 * * @param activityName * @return */ public Activity getActivityByClassName(String activityName) { for (Activity ac : mActivityList) { if (ac.getClass().getName().indexOf(activityName) >= 0) { SaLogUtils .i(TAG, TAG + "-----getActivityByClassName-----" + ac); return ac; } } return null; } /** * 根据class类进行获取 * * @param clazz * @return */ @SuppressWarnings("rawtypes") public Activity getActivityByClass(Class clazz) { for (Activity ac : mActivityList) { if (ac.getClass().equals(clazz)) { SaLogUtils.i(TAG, TAG + "-----getActivityByClass-----" + ac); return ac; } } return null; } /** * 弹出指定的Activity实例,即销毁指定的界面 * * @param activity */ public void popActivity(Activity activity) { removeActivity(activity); activity.finish(); } /** * 弹出指定的Activity之前的实例 * * @param clzz */ @SuppressWarnings("rawtypes") public void popUntilActivity(Class... clzz) { List<Activity> list = new ArrayList<Activity>(); for (int i = mActivityList.size() - 1; i >= 0; i--) { Activity ac = mActivityList.get(i); boolean isTop = false; for (int j = 0; j < clzz.length; j++) { if (ac.getClass().equals(clzz[j])) { isTop = true; break; } } if (!isTop) { list.add(ac); } else break; } for (Iterator<Activity> iterator = list.iterator(); iterator.hasNext();) { Activity activity = iterator.next(); popActivity(activity); } } }