package com.youshibi.app; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Application; import android.content.Intent; import android.os.Bundle; import android.util.Log; import com.umeng.analytics.MobclickAgent; import com.zchu.log.Logger; import java.util.Iterator; import java.util.Stack; /** * 作者: 赵成柱 on 2016/7/14. * app管理器,管理所有activity的生命周期 */ public class AppManager { private static final boolean isShowLog = BuildConfig.DEBUG; private static final String TAG = "AppManager"; private Application mApplication; @SuppressLint("StaticFieldLeak") private static AppManager sInstance; private Stack<Activity> mActivityStack; private int mStageActivityCount = 0; //前台activity数 private AppManager(Application application) { mActivityStack = new Stack<>(); mApplication = application; application.registerActivityLifecycleCallbacks(new MyActivityLifecycleCallbacks()); } public static AppManager init(Application application) { if (application == null) { throw new NullPointerException("You cannot start a init on a null Application"); } if (sInstance == null) { sInstance = new AppManager(application); } return sInstance; } public static AppManager getInstance() { return sInstance; } /** * 获取指定的Activity */ public Activity getActivity(Class<?> cls) { if (mActivityStack != null) for (Activity activity : mActivityStack) { if (activity.getClass().equals(cls)) { return activity; } } return null; } /** * 添加Activity到堆栈 */ private boolean addActivity(Activity activity) { return activity != null && mActivityStack.add(activity); } private boolean removeActivity(Activity activity) { return activity != null && mActivityStack.remove(activity); } /** * 获取当前Activity(堆栈中最后一个压入的) */ public Activity currentActivity() { Activity activity = null; if (!mActivityStack.empty()) { activity = mActivityStack.lastElement(); } return activity; } public Activity beforeActivity() { Activity activity = null; if (mActivityStack.size() > 1) { activity = mActivityStack.get(mActivityStack.size() - 2); } return activity; } public Activity beforeActivity(Activity activity) { Activity beforeActivity = null; int indexOf = mActivityStack.indexOf(activity); if (indexOf >= 1) { beforeActivity = mActivityStack.get(indexOf - 1); } return beforeActivity; } /** * 结束当前Activity(堆栈中最后一个压入的) */ public void finishActivity() { if (!mActivityStack.empty()) { finishActivity(mActivityStack.pop()); } } /** * 结束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null && !activity.isFinishing()) { mActivityStack.remove(activity); activity.finish(); } } /** * 结束指定类名的所有Activity */ public void finishActivity(Class<?> cls) { Iterator<Activity> iterator = mActivityStack.iterator(); while (iterator.hasNext()) { Activity activity = iterator.next(); if (activity.getClass().equals(cls)) { iterator.remove(); activity.finish(); } } } /** * 结束指定非类名的所有Activity */ public void finishOtherActivity(Class<?> cls) { Iterator<Activity> iterator = mActivityStack.iterator(); while (iterator.hasNext()) { Activity activity = iterator.next(); if (!activity.getClass().equals(cls)) { iterator.remove(); activity.finish(); } } } /** * 结束所有Activity */ public void finishAllActivity() { Iterator<Activity> iterator = mActivityStack.iterator(); while (iterator.hasNext()) { Activity activity = iterator.next(); iterator.remove(); activity.finish(); } } public Object[] getActivityArray(){ return mActivityStack.toArray(); } /** * 判断应用是否处于前台 */ public boolean isStagApp() { return mStageActivityCount > 0; } /** * 重启应用程序 */ public void resetApp() { Intent i = mApplication.getPackageManager() .getLaunchIntentForPackage(mApplication.getPackageName()); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); mApplication.startActivity(i); exit(); } public void exit() { try { finishAllActivity(); // 友盟统计,统计关闭 MobclickAgent.onKillProcess(mApplication); // 杀死该应用进程 android.os.Process.killProcess(android.os.Process.myPid()); } catch (Exception e) { Logger.e(e); } } private class MyActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks { @Override public void onActivityCreated(Activity activity, Bundle bundle) { if (isShowLog) { Log.i(TAG, "onActivityCreated :" + activity); } AppManager.sInstance.addActivity(activity); } @Override public void onActivityStarted(Activity activity) { if (isShowLog) { Log.i(TAG, "onActivityStarted :" + activity); } mStageActivityCount++; } @Override public void onActivityResumed(Activity activity) { if (isShowLog) { Log.i(TAG, "onActivityResumed :" + activity); } } @Override public void onActivityPaused(Activity activity) { if (isShowLog) { Log.i(TAG, "onActivityPaused :" + activity); } } @Override public void onActivityStopped(Activity activity) { if (isShowLog) { Log.i(TAG, "onActivityStopped :" + activity); } mStageActivityCount--; } @Override public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { if (isShowLog) { Log.i(TAG, "onActivitySaveInstanceState :" + activity); } } @Override public void onActivityDestroyed(Activity activity) { if (isShowLog) { Log.i(TAG, "onActivityDestroyed :" + activity); } AppManager.sInstance.removeActivity(activity); } } }