Android—管理Activity的工具類
阿新 • • 發佈:2018-12-17
在開發過程中會有不同的功能需求,對不同的Activity做類似的處理,為了方便精化程式碼所以一般是自己寫一個工具類來做管理。我的專案用到的Activity的處理: 可直接食用,若你有更好的其他的需求處理的辦法請在下方留言,謝謝!
public class ActivityUtil { private static final String TAG = "ActivityUtil"; /** * 單一例項 */ private static ActivityUtil sActivityUtil; /** * Activity堆疊 Stack:執行緒安全 */ public Stack<Activity> mActivityStack = new Stack<>(); /** * 私有構造器 無法外部建立 */ private ActivityUtil() { } /** * 獲取單一例項 雙重鎖定 * @return this */ public static ActivityUtil getInstance() { if (sActivityUtil == null) { synchronized (ActivityUtil.class) { if (sActivityUtil == null) { sActivityUtil = new ActivityUtil(); } } } return sActivityUtil; } /** * 新增Activity到堆疊 */ public void addActivity(Activity activity) { mActivityStack.add(activity); } /** * 移除堆疊中的Activity * @param activity Activity */ public void removeActivity(Activity activity) { if (activity != null && mActivityStack.contains(activity)) { mActivityStack.remove(activity); } } /** * 獲取當前Activity (堆疊中最後一個新增的) * @return Activity */ public Activity getCurrentActivity() { return mActivityStack.lastElement(); } /** * 獲取指定類名的Activity */ public Activity getActivity(Class<?> cls) { if (mActivityStack != null) for (Activity activity : mActivityStack) { if (activity.getClass().equals(cls)) { return activity; } } return null; } /** * 結束當前Activity (堆疊中最後一個新增的) */ public void finishCurrentActivity() { Activity activity = mActivityStack.lastElement(); finishActivity(activity); } /** * 結束指定的Activity * @param activity Activity */ public void finishActivity(Activity activity) { if (activity != null && mActivityStack.contains(activity)) { mActivityStack.remove(activity); activity.finish(); } } /** * 結束指定類名的Activity * @param clazz Activity.class */ public void finishActivity(Class<?> clazz) { for (Activity activity : mActivityStack) { if (activity.getClass().equals(clazz)) { finishActivity(activity); break; } } } /** * 結束所有Activity */ public void finishAllActivity() { for (int i = mActivityStack.size() - 1; i >= 0; i--) { if (mActivityStack.get(i) != null) { finishActivity(mActivityStack.get(i)); } } mActivityStack.clear(); } /** * 結束某個Activity之外的所有Activity */ public void finishAllActivityExcept(Class<?> clazz) { for (int i = mActivityStack.size() - 1; i >= 0; i--) { if (mActivityStack.get(i) != null && !mActivityStack.get(i).getClass().equals(clazz)) { finishActivity(mActivityStack.get(i)); } } } /** * 退出應用程式 */ public void exitApp() { try { finishAllActivity(); } catch (Exception e) { e.printStackTrace(); } finally { System.exit(0); } } /** * 判斷某個Activity 介面是否在前臺 * @param context * @param className 某個介面名稱 * @return */ public static boolean isForeground(Context context, String className) { if (context == null || TextUtils.isEmpty(className)) { return false; } ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1); if (list != null && list.size() > 0) { ComponentName cpn = list.get(0).topActivity; if (className.equals(cpn.getClassName())) { return true; } } return false; } }