自定义Activity的管理类,方便Activity的管理
import android.app.Activity; import java.util.Stack; public class ActivityManager { private Stack<Activity> activityStack; private static ActivityManager instance; private ActivityManager() { } /** * 单一实例 */ public static ActivityManager getInstance() { if (instance == null) { instance = new ActivityManager(); } return instance; } /** * 添加指定Activity * @param activity 要添加的activity */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); } /** * 获取当前管理器中Activity的数量 * @return 当前管理器中Activity的数量 */ public int getSize() { return activityStack.size(); } /** * 移除指定Activity * @param activity 要移除的activity */ public void removeActivity(Activity activity) { if (activityStack != null) { activityStack.remove(activity); } } /** * 获取管理器中指定的Activity * @param clazz 传入要找的Activity * @return 管理器中与传入Activity相同的Activity */ public Activity getActivity(Class<?> clazz) { if (activityStack != null) { for (Activity activity : activityStack) { if (clazz.equals(activity.getClass())) { return activity; } } } return null; } /** * 获取当前Activity * @return 当前Activity */ public Activity getCurrentActivity() { if (activityStack != null) { return activityStack.lastElement(); } return null; } /** * @return 获取所有Activity */ public Stack<Activity> getAllActivityStacks() { return activityStack; } /** * 结束指定的Activity * @param activity 指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { if (!activity.isFinishing()) { activity.finish(); if(null!=activityStack){ activityStack.remove(activity); } } } } /** * @param cls 结束指定类名的Activity */ public void finishActivity(Class<?> cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); break; } } } /** * 结束除当前传入以外所有Activity * @param cls 要保留的Activity */ public void finishOthersActivity(Class<?> cls) { if (activityStack != null) { for (Activity activity : activityStack) { if (!activity.getClass().equals(cls)) { activity.finish(); } } } } /** * 结束除当前传入以外所有Activity * @param cls1 要保留的Activity1 * @param cls2 要保留的Activity2 */ public void finishOthersActivity(Class<?> cls1,Class<?> cls2) { if (activityStack != null) { for (Activity activity : activityStack) { if (!activity.getClass().equals(cls1) && !activity.getClass().equals(cls2)) { activity.finish(); } } } } /** * 结束所有 Activity */ public void finishAllActivity() { if (activityStack != null) { for (Activity activity : activityStack) { activity.finish(); } } activityStack.clear(); } /** * 退出 app 时调用 */ public void exitApp() { try { finishAllActivity(); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); } catch (Exception e) { e.printStackTrace(); } } }使用方法:
方法1、在每个Activity的生命周期中绑定。
方法2、定义一个BaseActivity抽象类,在生命周期中绑定Activity管理器,让所有Activity都继承这个抽象类。
方法3、自定义MyApplication,通过this.registerActivityLifecycleCallbacks回调Activity生命周期的监听中绑定Activity管理器。
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import android.util.Log;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
ActivityManager.getInstance().addActivity(activity);
Log.e("===="+activity.getLocalClassName(),"size=="+ActivityManager.getInstance().getSize());
}
@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.getInstance().removeActivity(activity);
Log.e("===="+activity.getLocalClassName(),"size=="+ActivityManager.getInstance().getSize());
}
});
}
}
在实际开发中我是方法1和方法3配合使用。