package com.arialyy.frame.core; import android.app.ActivityManager; import android.content.Context; import com.arialyy.frame.util.show.FL; import java.util.Stack; /** * Created by lyy on 2015/11/4. * APP生命周期管理类管理 */ public class AbsFrame { private static final String TAG = "AbsFrame"; private static final Object LOCK = new Object(); private volatile static AbsFrame mManager = null; private Context mContext; private Stack<AbsActivity> mActivityStack = new Stack<>(); private AbsFrame() { } private AbsFrame(Context context) { mContext = context; } /** * 初始化框架 * * @param applicationContext * @return */ public static AbsFrame init(Context applicationContext) { if (mManager == null) { synchronized (LOCK) { if (mManager == null) { mManager = new AbsFrame(applicationContext); } } } return mManager; } /** * 获取AppManager管流程实例 * * @return */ public static AbsFrame getInstance() { if (mManager == null) { throw new NullPointerException("请在application 的 onCreate 方法里面使用MVVMFrame.init()方法进行初始化操作"); } return mManager; } public Stack<AbsActivity> getActivityStack() { return mActivityStack; } /** * 开启异常捕获 * 日志文件位于/data/data/Package Name/cache//crash/AbsExceptionFile.crash */ public void openCrashHandler() { openCrashHandler("", ""); } /** * 开启异常捕获 * 需要网络权限,get请求,异常参数,需要下面两个网络权限 * android:name="android.permission.INTERNET" * android:name="android.permission.ACCESS_NETWORK_STATE" * * @param serverHost 服务器地址 * @param key 数据传输键值 */ public AbsFrame openCrashHandler(String serverHost, String key) { CrashHandler handler = CrashHandler.getInstance(mContext); handler.setServerHost(serverHost, key); Thread.setDefaultUncaughtExceptionHandler(handler); return this; } /** * 堆栈大小 */ public int getActivitySize() { return mActivityStack.size(); } /** * 获取指定的Activity */ public AbsActivity getActivity(int location) { return mActivityStack.get(location); } /** * 添加Activity到堆栈 */ public void addActivity(AbsActivity activity) { if (mActivityStack == null) { mActivityStack = new Stack<>(); } mActivityStack.add(activity); } /** * 获取当前Activity(堆栈中最后一个压入的) */ public AbsActivity getCurrentActivity() { return mActivityStack.lastElement(); } /** * 结束当前Activity(堆栈中最后一个压入的) */ public void finishActivity() { finishActivity(mActivityStack.lastElement()); } /** * 结束指定的Activity */ public void finishActivity(AbsActivity activity) { if (activity != null) { mActivityStack.remove(activity); activity.finish(); } } /** * 移除指定的Activity */ public void removeActivity(AbsActivity activity) { if (activity != null) { mActivityStack.remove(activity); } } /** * 结束指定类名的Activity */ public void finishActivity(Class<?> cls) { for (AbsActivity activity : mActivityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } } /** * 结束所有Activity */ public void finishAllActivity() { for (int i = 0, size = mActivityStack.size(); i < size; i++) { if (mActivityStack.get(i) != null && mActivityStack.size() > 0) { mActivityStack.get(i).finish(); } } mActivityStack.clear(); } /** * 退出应用程序 * * @param isBackground 是否开开启后台运行 */ public void exitApp(Boolean isBackground) { try { finishAllActivity(); ActivityManager activityMgr = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); activityMgr.restartPackage(mContext.getPackageName()); } catch (Exception e) { FL.e(TAG, FL.getExceptionString(e)); } finally { // 注意,如果您有后台程序运行,请不要支持此句子 if (!isBackground) { System.exit(0); } } } }