Chinaunix首页 | 论坛 | 博客
  • 博客访问: 405647
  • 博文数量: 121
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1393
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-11 12:17
个人简介

www.vibexie.com vibexie@qq.com

文章分类

全部博文(121)

文章存档

2015年(55)

2014年(66)

我的朋友

分类: Android平台

2015-04-24 12:27:26


ActivityStackManager.java

  1. package com.vibexie.jianai.Activitys;

  2. import android.app.Activity;
  3. import android.app.Application;

  4. import java.util.LinkedList;
  5. import java.util.List;

  6. /**
  7.  * 定义栈,利用单例模式管理Activity,
  8.  *
  9.  * 注意如果使用了这个类,务必在项目中所有的acivity中调用下列代码
  10.  * 在activity的onCreate()方法中调用ActivityStackManager.getInstance().push(this);
  11.  * onDestroy()方法中调用ActivityStackManager.getInstance().pop(this);
  12.  *
  13.  * 在退出时,调用ActivityStackManager.getInstance().exitApp()方法,就可以完全退出应用程序了。
  14.  *
  15.  * Created by vibexie on 4/24/15.
  16.  */
  17. public class ActivityStackManager extends Application{

  18.     /**
  19.      * 构建空栈
  20.      */
  21.     private List<Activity> activityStack=new LinkedList<Activity>();

  22.     private static ActivityStackManager instance;

  23.     /**
  24.      * 单例模式
  25.      */
  26.     private ActivityStackManager(){

  27.     }

  28.     /**
  29.      * 获取单例
  30.      * @return
  31.      */
  32.     public static ActivityStackManager getInstance(){

  33.         if(null==instance){
  34.             instance=new ActivityStackManager();
  35.         }

  36.         return instance;
  37.     }

  38.     /**
  39.      * 获取activityList
  40.      * @return
  41.      */
  42.     public List<Activity> getActivityStack() {
  43.         return activityStack;
  44.     }

  45.     /**
  46.      * 压入activity到activityStack中
  47.      * @param activity
  48.      */
  49.     public void push(Activity activity){
  50.         activityStack.add(activity);
  51.     }

  52.     /**
  53.      * 从activityStack弹出栈顶元素
  54.      */
  55.     public void pop(){
  56.         /**
  57.          * 如果已经到了栈底,显然需要退出程序
  58.          */
  59.         boolean exitFlag=false;

  60.         if(activityStack.size()==0){
  61.             /*栈为空*/

  62.             return;
  63.         }else if(activityStack.size()==1) {
  64.             /*到了栈底,应该退出App*/

  65.             exitFlag=true;
  66.         }

  67.         /**
  68.          * finish栈顶activity
  69.          */
  70.         activityStack.get(activityStack.size()-1).finish();

  71.         /**
  72.          * 在栈中移除栈顶
  73.          */
  74.         activityStack.remove(activityStack.size()-1);

  75.         /**
  76.          * 退出App
  77.          */
  78.         if(exitFlag){
  79.             System.exit(0);
  80.         }
  81.     }

  82.     /**
  83.      * 弹出多个activity
  84.      * @param num 弹出activity的数量
  85.      */
  86.     public void pop(int num){
  87.         /**
  88.          * 如果参数大于栈中activity数量,则num置为栈中activity数量
  89.          */
  90.         num=(activityStack.size()<num?activityStack.size():num);

  91.         for(;num>0;num--){
  92.             /**
  93.              * 调用无参pop()弹出栈顶;
  94.              */
  95.             pop();
  96.         }
  97.     }

  98.     /**
  99.      * 从activityStack中弹出指定activity,注意在调用这个方法前不要调用finish()
  100.      * @param activity
  101.      */
  102.     public void pop(Activity activity){
  103.         /**
  104.          * 这个判断是防止用户调用了finish()方法后再次调用这个方法,这将导致空指针异常
  105.          */
  106.         if(!activityStack.contains(activity)){
  107.             return;
  108.         }

  109.         /**
  110.          * finish activity
  111.          */
  112.         activity.finish();

  113.         /**
  114.          * 从activityList移除activity
  115.          */
  116.         activityStack.remove(activity);
  117.     }

  118.     /**
  119.      * 退出APP
  120.      */
  121.     public void exitApp(){
  122.         /**
  123.          * 遍历地finish activity
  124.          */
  125.         for(Activity activity:activityStack){
  126.             activity.finish();
  127.         }

  128.         System.exit(0);
  129.     }
  130. }

阅读(3640) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~