activity堆栈式管理

activity堆栈式管理

https://www.bbsmax.com/A/GBJrXEVBd0/

 
  1. package com.chinaCEB.cebActivity.utils;
  2.  
  3. import java.util.Stack;
  4.  
  5. import android.app.Activity;
  6. import android.content.Context;
  7.  
  8. /**
  9. * activity堆栈式管理
  10. *
  11. * @author FireAnt(http://my.oschina.net/LittleDY)
  12. * @created 2014年10月30日 下午6:22:05
  13. *
  14. */
  15. public class AppManager {
  16.  
  17. private static Stack<Activity> activityStack;
  18. private static AppManager instance;
  19.  
  20. private AppManager() {}
  21.  
  22. /**
  23. * 单一实例
  24. */
  25. public static AppManager getAppManager() {
  26. if (instance == null) {
  27. instance = new AppManager();
  28. }
  29. return instance;
  30. }
  31.  
  32. /**
  33. * 添加Activity到堆栈
  34. */
  35. public void addActivity(Activity activity) {
  36. if (activityStack == null) {
  37. activityStack = new Stack<Activity>();
  38. }
  39. activityStack.add(activity);
  40. }
  41.  
  42. /**
  43. * 获取当前Activity(堆栈中最后一个压入的)
  44. */
  45. public Activity currentActivity() {
  46. Activity activity = activityStack.lastElement();
  47. return activity;
  48. }
  49.  
  50. /**
  51. * 结束当前Activity(堆栈中最后一个压入的)
  52. */
  53. public void finishActivity() {
  54. Activity activity = activityStack.lastElement();
  55. finishActivity(activity);
  56. }
  57.  
  58. /**
  59. * 结束指定的Activity
  60. */
  61. public void finishActivity(Activity activity) {
  62. if (activity != null && !activity.isFinishing()) {
  63. activityStack.remove(activity);
  64. activity.finish();
  65. activity = null;
  66. }
  67. }
  68.  
  69. /**
  70. * 结束指定类名的Activity
  71. */
  72. public void finishActivity(Class<?> cls) {
  73. for (Activity activity : activityStack) {
  74. if (activity.getClass().equals(cls)) {
  75. finishActivity(activity);
  76. break;
  77. }
  78. }
  79. }
  80.  
  81. /**
  82. * 结束所有Activity
  83. */
  84. public void finishAllActivity() {
  85. for (int i = 0, size = activityStack.size(); i < size; i++) {
  86. if (null != activityStack.get(i)) {
  87. //finishActivity方法中的activity.isFinishing()方法会导致某些activity无法销毁
  88. //貌似跳转的时候最后一个activity 是finishing状态,所以没有执行
  89. //内部实现不是很清楚,但是实测结果如此,使用下面代码则没有问题
  90. // find by TopJohn
  91. //finishActivity(activityStack.get(i));
  92.  
  93. activityStack.get(i).finish();
  94. //break;
  95. }
  96. }
  97. activityStack.clear();
  98. }
  99.  
  100. /**
  101. * 获取指定的Activity
  102. *
  103. * @author kymjs
  104. */
  105. public static Activity getActivity(Class<?> cls) {
  106. if (activityStack != null)
  107. for (Activity activity : activityStack) {
  108. if (activity.getClass().equals(cls)) {
  109. return activity;
  110. }
  111. }
  112. return null;
  113. }
  114.  
  115. /**
  116. * 退出应用程序
  117. */
  118. public void AppExit(Context context) {
  119. try {
  120. finishAllActivity();
  121. // 杀死该应用进程
  122. android.os.Process.killProcess(android.os.Process.myPid());
  123. System.exit(0);
  124. } catch (Exception e) {
  125. }
  126. }
  127. }

堆栈式管理就是好,我想后退,不用sb的finish了。而且更多的方便。

发布了64 篇原创文章 · 获赞 36 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/kuangben2000/article/details/104073481
今日推荐