package com.mogo.utils; import android.app.Activity; import java.util.ArrayDeque; import java.util.Deque; import java.util.Iterator; public class ActivityStack { private static final Deque< Activity > ACTIVITY_STACK = new ArrayDeque<>(); public static synchronized void addActivity( Activity activity) { if(activity != null){ ACTIVITY_STACK.offer(activity); } } public static synchronized Activity currentActivity() { return ACTIVITY_STACK.peekLast(); } public static synchronized void finishCurrentActivity() { Activity activity = ACTIVITY_STACK.pop(); if (!activity.isFinishing()) { activity.finish(); } } public static synchronized void finishActivity( Activity activity) { ACTIVITY_STACK.remove(activity); if (!activity.isFinishing()) { activity.finish(); } } public static synchronized void finishActivity( Class cls) { Iterator< Activity > iterator = ACTIVITY_STACK.iterator(); while (iterator.hasNext()) { Activity next = iterator.next(); if(next.getClass().equals(cls)){ iterator.remove(); if(!next.isFinishing()){ next.finish(); } } } } public static synchronized void finishActivityExcept( Class cls) { Iterator< Activity > iterator = ACTIVITY_STACK.iterator(); while (iterator.hasNext()) { Activity next = iterator.next(); if (!next.getClass().equals(cls)) { iterator.remove(); if(!next.isFinishing()){ next.finish(); } } } } public static synchronized void finishAllActivity() { Iterator< Activity > iterator = ACTIVITY_STACK.iterator(); while (iterator.hasNext()) { iterator.remove(); Activity next = iterator.next(); if(!next.isFinishing()){ next.finish(); } } } public static synchronized boolean isActivityExist( Class cls){ Iterator< Activity > iterator = ACTIVITY_STACK.iterator(); while (iterator.hasNext()) { Activity next = iterator.next(); if(next.getClass().equals(cls)){ return true; } } return false; } }