Android Activity管理類最佳化記憶體利器非常方便
項目開啟的Activity越多,占的記憶體越多,我們是不是有時候想當我開啟很多介面的時候,我們到底開啟多少個Activity,OK現在你的難題解決了,只有把這個Activity管理類複製到你的項目當中,隨時隨地管理的你的Activity,讓你成為記憶體的主導者!不要問我叫什麼,請叫我雷鋒!首先看看:
代碼獻上:
<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHByZSBjbGFzcz0="brush:java;">/** * 2014-6-7 上午10:40:16 */package com.jiub.client.mobile.manager;import java.util.Stack;import android.app.Activity;import com.jiub.client.mobile.utils.QLog;/** * @author zqy * * */public class ScreenManager {private final static String TAG=ScreenManager.class.getSimpleName(); private static Stack activityStack; private static ScreenManager instance; public static ScreenManager getScreenManager(){ if (instance == null) { instance = new ScreenManager(); } QLog.i(TAG, "ScreenManager create"); return instance; } /** * 從棧中移除最後一個元?? */ public void popActivity(){ Activity activity = currentActivity(); if (activity != null) { if (!activity.isFinishing()) { activity.finish(); } activityStack.removeElement(activity); activity = null; } QLog.i(TAG, "ScreenManager popActivity "); } /** * 從棧中移除指定的元素 * @param activity */ public void popActivity(Activity activity){ if (activity != null) { QLog.i(TAG, "要刪除"+activity.getClass().getSimpleName()); if (!activity.isFinishing()) { activity.finish(); QLog.i(TAG, activity.getClass().getSimpleName()+"正在關閉"); }else{ QLog.i(TAG, activity.getClass().getSimpleName()+"已經關閉"); } activityStack.removeElement(activity); QLog.i(TAG, activity.getClass().getSimpleName()+"從棧中移除"); activity = null; } int size=activityStack.size(); QLog.i(TAG, "刪除後個數"+size); } /** * 將新元素添加到棧中 * @param activity */ public void pushActivity(Activity activity){ if (activityStack == null) { activityStack = new Stack(); } activityStack.addElement(activity); QLog.i(TAG, "加入"+activity.getClass().getSimpleName()); int size=activityStack.size(); QLog.i(TAG, "添加後個數"+size); } /** * 擷取棧頂元素 * @return */ public Activity currentActivity(){ Activity activity = null; try { activity = activityStack.lastElement(); } catch (Exception e) { } return activity; } /** * 移除全部元素,除了指定類型的以外 * @param cls */ public void popAllActivityExceptOne(Class cls){ int size = activityStack.size(); for (int i = 0; i < size; i++) { Activity activity = activityStack.get(i); if (activity != null && activity.getClass().equals(cls)) { }else{ popActivity(activity); size--; i--; } } } /** * 按照給定的Class,結束一個Activity * @param cls */ public void finishActivityByClass(Class cls){ int size = activityStack.size(); for (int i = 0; i < size; i++) { Activity activity = activityStack.get(i); if (activity != null && activity.getClass().equals(cls)) { popActivity(activity); size--; i--; } } } }
最後在Activity onCreate方法中寫上三行的代碼:
protected ScreenManager mScreenManager;//初始化
mScreenManager = ScreenManager.getScreenManager();mScreenManager.pushActivity(this);
在Activity的onDestroy方法裡面寫上這行代碼
mScreenManager.popActivity(this);
但是那如果你有BaseActivity就不需要在每個Activity裡面寫了,把上面的四行代碼寫在BaseActivity裡面就行了