package com.guiying.common.base; import android.app.Activity; import android.app.ActivityManager; import android.app.Application; import android.content.Context; import android.util.Log; import com.guiying.common.utils.Utils; import com.orhanobut.logger.LogLevel; import com.orhanobut.logger.Logger; import java.util.Stack; /** * 要想使用BaseApplication,必须在组件中实现自己的Application,并且继承BaseApplication; * 组件中实现的Application必须在debug包中的AndroidManifest.xml中注册,否则无法使用; * 组件的Application需置于java/debug文件夹中,不得放于主代码; * 组件中获取Context的方法必须为:Utils.getContext(),不允许其他写法; * BaseApplication主要用来管理全局Activity; * * @author 2016/12/2 17:02 * @version V1.0.0 * @name BaseApplication */ public class BaseApplication extends Application { private static BaseApplication sInstance; private Stack activityStack; public static BaseApplication getIns() { return sInstance; } @Override public void onCreate() { super.onCreate(); sInstance = this; Utils.init(this); if (Utils.isAppDebug()) { //只有debug模式才会打印日志 Logger.init("Petrel").logLevel(LogLevel.FULL); } else { Logger.init("Petrel").logLevel(LogLevel.NONE); } } /** * 添加指定Activity到堆栈 */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<>(); } activityStack.add(activity); } /** * 获取当前Activity */ public Activity currentActivity() { return activityStack.lastElement(); } /** * 结束当前Activity */ public void finishActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** * 结束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } } /** * 结束指定Class的Activity */ public void finishActivity(Class cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); return; } } } /** * 结束全部的Activity */ public void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i)) { activityStack.get(i).finish(); } } activityStack.clear(); } /** * 退出应用程序 */ public void exitApp(Context context) { try { finishAllActivity(); //杀死后台进程需要在AndroidManifest中声明android.permission.KILL_BACKGROUND_PROCESSES; ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); activityManager.killBackgroundProcesses(context.getPackageName()); //System.exit(0); } catch (Exception e) { Log.e("ActivityManager", "app exit" + e.getMessage()); } } }