BaseApplication.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.guiying.common.base;
  2. import android.app.Activity;
  3. import android.app.ActivityManager;
  4. import android.app.Application;
  5. import android.content.Context;
  6. import android.util.Log;
  7. import com.guiying.common.utils.Utils;
  8. import com.orhanobut.logger.LogLevel;
  9. import com.orhanobut.logger.Logger;
  10. import java.util.Stack;
  11. /**
  12. * 要想使用BaseApplication,必须在组件中实现自己的Application,并且继承BaseApplication;
  13. * 组件中实现的Application必须在debug包中的AndroidManifest.xml中注册,否则无法使用;
  14. * 组件的Application需置于java/debug文件夹中,不得放于主代码;
  15. * 组件中获取Context的方法必须为:Utils.getContext(),不允许其他写法;
  16. * BaseApplication主要用来管理全局Activity;
  17. *
  18. * @author 2016/12/2 17:02
  19. * @version V1.0.0
  20. * @name BaseApplication
  21. */
  22. public class BaseApplication extends Application {
  23. private static BaseApplication sInstance;
  24. private Stack<Activity> activityStack;
  25. public static BaseApplication getIns() {
  26. return sInstance;
  27. }
  28. @Override
  29. public void onCreate() {
  30. super.onCreate();
  31. sInstance = this;
  32. Utils.init(this);
  33. if (Utils.isAppDebug()) {
  34. //只有debug模式才会打印日志
  35. Logger.init("Petrel").logLevel(LogLevel.FULL);
  36. } else {
  37. Logger.init("Petrel").logLevel(LogLevel.NONE);
  38. }
  39. }
  40. /**
  41. * 添加指定Activity到堆栈
  42. */
  43. public void addActivity(Activity activity) {
  44. if (activityStack == null) {
  45. activityStack = new Stack<>();
  46. }
  47. activityStack.add(activity);
  48. }
  49. /**
  50. * 获取当前Activity
  51. */
  52. public Activity currentActivity() {
  53. return activityStack.lastElement();
  54. }
  55. /**
  56. * 结束当前Activity
  57. */
  58. public void finishActivity() {
  59. Activity activity = activityStack.lastElement();
  60. finishActivity(activity);
  61. }
  62. /**
  63. * 结束指定的Activity
  64. */
  65. public void finishActivity(Activity activity) {
  66. if (activity != null) {
  67. activityStack.remove(activity);
  68. activity.finish();
  69. activity = null;
  70. }
  71. }
  72. /**
  73. * 结束指定Class的Activity
  74. */
  75. public void finishActivity(Class<?> cls) {
  76. for (Activity activity : activityStack) {
  77. if (activity.getClass().equals(cls)) {
  78. finishActivity(activity);
  79. return;
  80. }
  81. }
  82. }
  83. /**
  84. * 结束全部的Activity
  85. */
  86. public void finishAllActivity() {
  87. for (int i = 0, size = activityStack.size(); i < size; i++) {
  88. if (null != activityStack.get(i)) {
  89. activityStack.get(i).finish();
  90. }
  91. }
  92. activityStack.clear();
  93. }
  94. /**
  95. * 退出应用程序
  96. */
  97. public void exitApp(Context context) {
  98. try {
  99. finishAllActivity();
  100. //杀死后台进程需要在AndroidManifest中声明android.permission.KILL_BACKGROUND_PROCESSES;
  101. ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
  102. activityManager.killBackgroundProcesses(context.getPackageName());
  103. //System.exit(0);
  104. } catch (Exception e) {
  105. Log.e("ActivityManager", "app exit" + e.getMessage());
  106. }
  107. }
  108. }