import android.app.Activity;
import java.util.Stack;
public class CommonActivityManager {
//Activity堆栈
private static Stack<Activity> activityStack;
private static CommonActivityManager instance;
//事件通知接口
private Action action;
private Action removeAction;
public CommonActivityManager setAction(Action action) {
this.action = action;
return this;
}
public CommonActivityManager setRemoveAction(Action removeAction) {
this.removeAction = removeAction;
return this;
}
private CommonActivityManager() {
}
/**
* 单例
*
* @return
*/
public static CommonActivityManager getActivityManager() {
if (instance == null) {
instance = new CommonActivityManager();
}
return instance;
}
/**
* 关闭最上层的activity
*/
public void popActivity() {
Activity activity = activityStack.lastElement();
if (activity != null) {
activity.finish();
activity = null;
}
}
public void removeActivity(Activity activity) {
if (removeAction != null) {
String deleteName = activity.getClass().getName();
activityStack.remove(activity);
removeAction.removeAction(deleteName);
}else{
activityStack.remove(activity);
activity = null;
}
}
/**
* 添加指定的activity
*
* @param activity
*/
public void pushActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
if (action != null) {
try {
action.addAction();
} catch (Exception e) {
//ignore
}
}
}
/**
* 关闭指定的activity
*
* @param activity
*/
public void popActivity(Activity activity) {
if (activity != null) {
activity.finish();
removeAction();
activityStack.remove(activity);
activity = null;
}
}
/**
* 获取当前的activity
*
* @return
*/
public Activity currentActivity() {
if (activityStack != null && activityStack.size() != 0) {
Activity activity = activityStack.lastElement();
return activity;
} else {
return null;
}
}
public void removeAction() {
if (action != null) {
action = null;
}
if(removeAction!=null){
removeAction=null;
}
}
/**
* 关闭所有Activity, 除了cls
*
* @param cls
*/
public void popAllActivityExceptOne(Class cls) {
try {
for (int i = 0; i < activityStack.size(); i++) {
Activity activity = activityStack.get(i);
if (activity == null) {
continue;
}
if (activity.getClass().equals(cls)) {
continue;
}
popActivity(activity);
i--;
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 关闭所有Activity, 除了packageNameClass
*
* @param packageNameClass
*/
public void popAllActivityExceptOne(String packageNameClass) {
Class<?> aClass = null;
try {
for (int i = 0; i < activityStack.size(); i++) {
Activity activity = activityStack.get(i);
if (activity == null) {
continue;
}
if (activity.getClass().getName().equals(packageNameClass)) {
continue;
}
popActivity(activity);
i--;
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 关闭指定的两个Activity, 除了cls
*
* @param cls1 cls2
*/
public void popAllActivityExceptTwo(Class cls1, Class cls2) {
try {
for (int i = 0; i < activityStack.size(); i++) {
Activity activity = activityStack.get(i);
if (activity == null) {
continue;
}
if (activity.getClass().equals(cls1) || activity.getClass().equals(cls2)) {
continue;
}
popActivity(activity);
i--;
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 退出应用
*/
public void exitApp() {
try {
while (true) {
Activity activity = currentActivity();
if (activity == null) {
break;
}
popActivity(activity);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public interface Action<T> {
void addAction();
void removeAction(T t);
}
public <T> T getActivity(Class<T> t) {
if (activityStack == null) {
return null;
}
for (Activity activity : activityStack) {
if (activity.getClass().getName().equals(t.getName())) {
return (T) activity;
}
}
return null;
}
}
任务栈是管理Activity的,而每一个Activity的生命周期都是可以被application监听到的,这个可以查看之前的一片关于Activity启动的博客,所以请看下面:
application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Activitymanager.getActivityManager().pushActiivty(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
Activitymanager.getActivityManager().removeActivity(activity);
}
});
这么做可以将所有加载的进来的Activity统一进行管理获取,包括Jar包或者aar等。