AppManager.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package me.yoqi.android.safekeyboard.utils;
  2. import android.app.Activity;
  3. import java.util.Stack;
  4. /**
  5. * @author liuyuqi.gov@msn.cn
  6. * @date 3/17/2021
  7. */
  8. public class AppManager {
  9. private static Stack<Activity> activityStack;
  10. private static class SingleHolder {
  11. private static AppManager instance = new AppManager();
  12. }
  13. public static AppManager getInstance() {
  14. return SingleHolder.instance;
  15. }
  16. /**
  17. * 添加Activity到堆栈
  18. */
  19. public void addActivity(Activity activity) {
  20. if (activityStack == null) {
  21. activityStack = new Stack<Activity>();
  22. }
  23. activityStack.add(activity);
  24. }
  25. /**
  26. * 是否有activity
  27. */
  28. public boolean isActivity() {
  29. if (activityStack != null) {
  30. return !activityStack.isEmpty();
  31. }
  32. return false;
  33. }
  34. /**
  35. * 获取当前Activity(堆栈中最后一个压入的)
  36. */
  37. public Activity currentActivity() {
  38. Activity activity = activityStack.lastElement();
  39. return activity;
  40. }
  41. /**
  42. * 结束当前Activity(堆栈中最后一个压入的)
  43. */
  44. public void finishActivity() {
  45. Activity activity = activityStack.lastElement();
  46. if (!activity.isFinishing()) {
  47. activity.finish();
  48. }
  49. }
  50. public void finishActivity(Activity activity) {
  51. activityStack.remove(activity);
  52. }
  53. /**
  54. * 结束指定类名的Activity
  55. */
  56. public void finishActivity(Class<?> cls) {
  57. for (Activity activity : activityStack) {
  58. if (activity.getClass().equals(cls)) {
  59. if (!activity.isFinishing()) {
  60. activity.finish();
  61. }
  62. break;
  63. }
  64. }
  65. }
  66. /**
  67. * 返回指定 Activity,当然这个Activity需要存在
  68. *
  69. * @param cls
  70. */
  71. public void backActivity(Class<?> cls) {
  72. while (!activityStack.empty()) {
  73. Activity activity = activityStack.pop(); // 指定activity置顶
  74. if (activity.getClass().equals(cls)) {
  75. activityStack.push(activity);
  76. break;
  77. } else {
  78. activity.finish();
  79. }
  80. }
  81. }
  82. /**
  83. * 结束所有Activity
  84. */
  85. public void finishAllActivity() {
  86. if (activityStack != null && activityStack.size() > 0) {
  87. for (int i = 0, size = activityStack.size(); i < size; i++) {
  88. Activity activity = activityStack.get(i);
  89. if (null != activityStack.get(i)) {
  90. if (!activity.isFinishing()) {
  91. activity.finish();
  92. }
  93. }
  94. }
  95. activityStack.clear();
  96. }
  97. }
  98. /**
  99. * 获取指定的Activity
  100. */
  101. public Activity getActivity(Class<?> cls) {
  102. if (activityStack != null) {
  103. for (Activity activity : activityStack) {
  104. if (activity.getClass().equals(cls)) {
  105. return activity;
  106. }
  107. }
  108. }
  109. return null;
  110. }
  111. public void appExit(int code) {
  112. try {
  113. finishAllActivity();
  114. android.os.Process.killProcess(android.os.Process.myPid());
  115. System.exit(code);
  116. } catch (Exception e) {
  117. activityStack.clear();
  118. e.printStackTrace();
  119. }
  120. }
  121. }