Android Activity管理类

那么我们要怎么来实现Activity的管理呢?

 

大家都知道,Android系统有自己的Activity管理机制,也就是 Activity Stack(栈)。奉行着 先进后出,后进先出的原则。那么我们就通过Stack来进行Activity的管理。

 

第一步,肯定是创建 Stack<Activity>集合。然后根据Stack<Activity>集合的方法进行操作。

 

实现包括:添加Activity到堆栈、获取当前的Activity(堆栈最后一个)、结束当前的Activity(堆栈最后一个)、结束指定的Activity、结束指定类名的Activity、结束所有的Activity等方法。

 

 

 

 
  1. /**

  2. * Activity管理类

  3. *

  4. */

  5. public class AppManager {

  6.  

    /** 堆栈管理对象 */
    private static final ActivityStack STACK = new ActivityStack();
    /** 当前显示的Activity */
    private static WeakReference<Activity> topActivity;
    /** 额外操作 */
    private static ExtraOperations         operations;
  7. private static Stack<Activity> activityStack;

  8. private static AppManager instance;

  9. private AppManager() {

  10. }

  11. /**

  12. * 单一实例

  13. */

  14. public static AppManager getAppManager() {

  15. if (instance == null) {

  16. instance = new AppManager();

  17. }

  18. return instance;

  19. }

  20.  

    /**
     * 从堆栈中删除指定对象
     */
    public boolean removeFromStack(Activity activity) {
        for (WeakReference<Activity> weak : activityStack) {
            final Activity act = weak.get();
            if (act == activity) {
                return activityStack.remove(weak);
            }
        }
        return false;
    }
    /**
  21.  * 获取当前显示的activity
     */
    public static Activity peek() {
        if (null != topActivity && null != topActivity.get()) {
            return topActivity.get();
        } else {
            return STACK.peekFromStack();
        }
    }
    /**
     * 退出APP
     */
    public static void onExit() {
        final long now = System.currentTimeMillis();
        if (now <= lastExitPressedMills + MAX_DOUBLE_EXIT_MILLS) {
            BqsDF.destroy();
            finishAll();
            if (null != operations) {
                operations.onExit();
            }
            System.exit(0);
        } else {
            if (null != peek()) {
                ToastUtil.toast(R.string.app_exit);
            }
            lastExitPressedMills = now;
        }
    }
  22. /**

  23. * 添加Activity到堆栈

  24. */

  25. public void addActivity(Activity activity) {

  26. if (activityStack == null) {

  27. activityStack = new Stack<Activity>();

  28. }

  29. activityStack.add(activity);

  30. }

  31. /**

  32. * 获取当前Activity(堆栈中最后一个压入的)

  33. */

  34. public Activity currentActivity() {

  35. Activity activity = activityStack.lastElement();

  36. return activity;

  37. }

  38. /**

  39. * 结束当前Activity(堆栈中最后一个压入的)

  40. */

  41. public void finishActivity() {

  42. Activity activity = activityStack.lastElement();

  43. finishActivity(activity);

  44. }

  45. /**

  46. * 结束指定的Activity

  47. */

  48. public void finishActivity(Activity activity) {

  49. if (activity != null) {

  50. activityStack.remove(activity);

  51. activity.finish();

  52. activity = null;

  53. }

  54. }

  55. /**

  56. * 结束指定类名的Activity

  57. */

  58. public void finishActivity(Class<?> cls) {

  59. for (Activity activity : activityStack) {

  60. if (activity.getClass().equals(cls)) {

  61. finishActivity(activity);

  62. }

  63. }

  64. }

  65. /**

  66. * 结束所有Activity

  67. */

  68. public void finishAllActivity() {

  69. for (int i = 0, size = activityStack.size(); i < size; i++) {

  70. if (null != activityStack.get(i)) {

  71. activityStack.get(i).finish();

  72. }

  73. }

  74. activityStack.clear();

  75. }

  76. /**

  77. * 退出应用程序

  78. */

  79. @SuppressWarnings("deprecation")

  80. public void AppExit(Context context) {

  81. try {

  82. finishAllActivity();

  83. ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

  84. activityManager.restartPackage(context.getPackageName());

  85. System.exit(0);

  86. } catch (Exception e) {

  87. e.printStackTrace();

  88. }

  89. }

  90.  

    public interface ExtraOperations {
        /** APP退出时需要额外处理的事情,例如广播的反注册,服务的解绑 */
        void onExit();
    
        /** activity 销毁时需要额外处理的事情,例如finish动画等 */
        void onActivityFinish(Activity activity);
    }
  91. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值