Android Activity管理类优化内存利器非常方便

 https://blog.csdn.net/u011310942/article/details/39320097

项目开启的Activity越多,占的内存越多,我们是不是有时候想当我打开很多界面的时候,我们到底打开多少个Activity,OK现在你的难题解决了,只有把这个Activity管理类复制到你的项目当中,随时随地管理的你的Activity,让你成为内存的主导者!不要问我叫什么,请叫我雷锋!首先看看效果图:



代码献上:

[java]  view plain  copy
  1. /** 
  2.  * 2014-6-7 上午10:40:16 
  3.  */  
  4. package com.jiub.client.mobile.manager;  
  5.   
  6. import java.util.Stack;  
  7.   
  8. import android.app.Activity;  
  9.   
  10. import com.jiub.client.mobile.utils.QLog;  
  11.   
  12. /** 
  13.  * @author zqy 
  14.  * 
  15.  *  
  16.  */  
  17. public class ScreenManager {  
  18.       
  19.     private final static String TAG=ScreenManager.class.getSimpleName();  
  20.       
  21.       
  22.    private static Stack<Activity> activityStack;  
  23.    private static ScreenManager instance;  
  24.       
  25.    public static ScreenManager getScreenManager(){  
  26.         if (instance == null) {  
  27.             instance = new ScreenManager();  
  28.         }  
  29.         QLog.i(TAG, "ScreenManager create");  
  30.         return instance;  
  31.           
  32.     }  
  33.       
  34.     /** 
  35.      * 从栈中移除最后一个元�? 
  36.      */  
  37.     public void popActivity(){  
  38.         Activity activity = currentActivity();  
  39.         if (activity != null) {  
  40.             if (!activity.isFinishing()) {  
  41.                 activity.finish();  
  42.             }  
  43.             activityStack.removeElement(activity);  
  44.             activity = null;  
  45.         }  
  46.         QLog.i(TAG, "ScreenManager popActivity ");  
  47.           
  48.     }  
  49.       
  50.     /** 
  51.      * 从栈中移除指定的元素 
  52.      * @param activity 
  53.      */  
  54.     public void popActivity(Activity activity){  
  55.         if (activity != null) {  
  56.             QLog.i(TAG, "要删除"+activity.getClass().getSimpleName());  
  57.             if (!activity.isFinishing()) {  
  58.                 activity.finish();  
  59.                 QLog.i(TAG, activity.getClass().getSimpleName()+"正在关闭");  
  60.             }else{  
  61.                 QLog.i(TAG, activity.getClass().getSimpleName()+"已经关闭");  
  62.             }  
  63.               
  64.             activityStack.removeElement(activity);  
  65.             QLog.i(TAG, activity.getClass().getSimpleName()+"从栈中移除");  
  66.             activity = null;  
  67.         }  
  68.           
  69.         int size=activityStack.size();  
  70.         QLog.i(TAG, "删除后个数"+size);  
  71.     }  
  72.   
  73.     /** 
  74.      * 将新元素添加到栈中 
  75.      * @param activity 
  76.      */  
  77.     public void pushActivity(Activity activity){  
  78.         if (activityStack == null) {  
  79.             activityStack = new Stack<Activity>();  
  80.         }  
  81.         activityStack.addElement(activity);  
  82.           
  83.         QLog.i(TAG, "加入"+activity.getClass().getSimpleName());  
  84.         int size=activityStack.size();  
  85.         QLog.i(TAG, "添加后个数"+size);  
  86.     }  
  87.       
  88.     /** 
  89.      * 获取栈顶元素 
  90.      * @return 
  91.      */  
  92.     public Activity currentActivity(){  
  93.         Activity activity = null;  
  94.         try {  
  95.             activity = activityStack.lastElement();  
  96.         } catch (Exception e) {  
  97.         }  
  98.         return activity;  
  99.     }  
  100.       
  101.     /** 
  102.      * 移除全部元素,除了指定类型的以外 
  103.      * @param cls 
  104.      */  
  105.     public void popAllActivityExceptOne(Class<?> cls){  
  106.         int size = activityStack.size();  
  107.         for (int i = 0; i < size; i++) {  
  108.             Activity activity = activityStack.get(i);  
  109.             if (activity != null && activity.getClass().equals(cls)) {  
  110.             }else{  
  111.                 popActivity(activity);  
  112.                 size--;  
  113.                 i--;  
  114.             }  
  115.         }  
  116.     }  
  117.       
  118.       
  119.     /** 
  120.      * 按照给定的Class,结束一个Activity 
  121.      * @param cls 
  122.      */  
  123.     public void finishActivityByClass(Class<?> cls){  
  124.         int size = activityStack.size();  
  125.         for (int i = 0; i < size; i++) {  
  126.             Activity activity = activityStack.get(i);  
  127.             if (activity != null && activity.getClass().equals(cls)) {  
  128.                 popActivity(activity);  
  129.                 size--;  
  130.                 i--;  
  131.             }  
  132.         }  
  133.     }  
  134.       
  135. }  

最后在Activity onCreate方法中写上三行的代码:

[java]  view plain  copy
  1. protected ScreenManager mScreenManager;//初始化  
[java]  view plain  copy
  1. mScreenManager = ScreenManager.getScreenManager();  
  2.         mScreenManager.pushActivity(this);  
在Activity的onDestroy方法里面写上这行代码

[java]  view plain  copy
  1. mScreenManager.popActivity(this);  
但是那如果你有BaseActivity就不需要在每个Activity里面写了,把上面的四行代码写在BaseActivity里面就行了

猜你喜欢

转载自blog.csdn.net/sinat_17775997/article/details/79813845
今日推荐