Activity管理工具类AppManager

来源:互联网 发布:seo站长 编辑:程序博客网 时间:2024/05/16 09:46
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. import java.util.Stack;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.ActivityManager;  
  5. import android.content.Context;  
  6.   
  7. /** 
  8.  *  
  9.  * @ClassName: com.qust.myutils.AppManager 
  10.  * @Description: Activity管理类:用于管理Activity和退出程序 
  11.  * @author zhaokaiqiang 
  12.  * @date 2014-11-20 下午4:53:33 
  13.  *  
  14.  */  
  15. public class AppManager {  
  16.   
  17.     // Activity栈  
  18.     private static Stack<Activity> activityStack;  
  19.     // 单例模式  
  20.     private static AppManager instance;  
  21.   
  22.     private AppManager() {  
  23.     }  
  24.   
  25.     /** 
  26.      * 单一实例 
  27.      */  
  28.     public static AppManager getAppManager() {  
  29.         if (instance == null) {  
  30.             instance = new AppManager();  
  31.         }  
  32.         return instance;  
  33.     }  
  34.   
  35.     /** 
  36.      * 添加Activity到堆栈 
  37.      */  
  38.     public void addActivity(Activity activity) {  
  39.         if (activityStack == null) {  
  40.             activityStack = new Stack<Activity>();  
  41.         }  
  42.         activityStack.add(activity);  
  43.     }  
  44.   
  45.     /** 
  46.      * 获取当前Activity(堆栈中最后一个压入的) 
  47.      */  
  48.     public Activity currentActivity() {  
  49.         Activity activity = activityStack.lastElement();  
  50.         return activity;  
  51.     }  
  52.   
  53.     /** 
  54.      * 结束当前Activity(堆栈中最后一个压入的) 
  55.      */  
  56.     public void finishActivity() {  
  57.         Activity activity = activityStack.lastElement();  
  58.         finishActivity(activity);  
  59.     }  
  60.   
  61.     /** 
  62.      * 结束指定的Activity 
  63.      */  
  64.     public void finishActivity(Activity activity) {  
  65.         if (activity != null) {  
  66.             activityStack.remove(activity);  
  67.             activity.finish();  
  68.             activity = null;  
  69.         }  
  70.     }  
  71.   
  72.     /** 
  73.      * 结束指定类名的Activity 
  74.      */  
  75.     public void finishActivity(Class<?> cls) {  
  76.         for (Activity activity : activityStack) {  
  77.             if (activity.getClass().equals(cls)) {  
  78.                 finishActivity(activity);  
  79.             }  
  80.         }  
  81.     }  
  82.   
  83.     /** 
  84.      * 结束所有Activity 
  85.      */  
  86.     public void finishAllActivity() {  
  87.         for (int i = 0; i < activityStack.size(); i++) {  
  88.             if (null != activityStack.get(i)) {  
  89.                 activityStack.get(i).finish();  
  90.             }  
  91.         }  
  92.         activityStack.clear();  
  93.     }  
  94.   
  95.     /** 
  96.      * 退出应用程序 
  97.      */  
  98.     public void AppExit(Context context) {  
  99.         try {  
  100.             finishAllActivity();  
  101.             ActivityManager activityMgr = (ActivityManager) context  
  102.                     .getSystemService(Context.ACTIVITY_SERVICE);  
  103.             activityMgr.killBackgroundProcesses(context.getPackageName());  
  104.             System.exit(0);  
  105.         } catch (Exception e) {  
  106.         }  
  107.     }  
  108. }  


    这个类是从oschina的android客户端开源项目中抽取出来的,主要用于Activity的管理和应用程序的退出。

    如果我们在退出程序的时候,调用AppManager.AppExit(Context)就可以将栈中所有的Activity实例销毁。

    如果我们要更加方便的是用这个管理类,推荐创建一个Activity的基类,并在onCreate和onDestory方法里面调用对应的方法,这样我们就不需要单独在某个Activity里面添加重复逻辑,精简代码,比如像下面这样

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.      * 对context进行初始化,并将当前的Activity加入到堆栈中,便于管理 
  3.      */  
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         // 添加Activity到堆栈  
  8.         AppManager.getAppManager().addActivity(this);  
  9.     }  
  10.   
  11.     @Override  
  12.     protected void onDestroy() {  
  13.         super.onDestroy();  
  14.         // 结束Activity&从堆栈中移除  
  15.         AppManager.getAppManager().finishActivity(this);  
  16.     }  
0 0