天天看點

android:記憶體優化總結

android的記憶體優化對于大型的android項目來說,十分重要!今天就選幾個常見的列舉一下

1. Context的引用

    在Activity和Fragment之外,使用Context的時候,盡量使用Application Context,在AndroidAnnotations中,也即是:

@RootContext
Context context;      

原因:應用的Context的生命周期很長,它與我們的app共存亡;我們盡量不要去hold Activity的Context,因為它的生命周期較短,否者,可能出現,Activity退出後,其Context依然被EBean的對象所持有。

2.Bitmap

Bitmap是android占用記憶體的大戶,我們需要注意:

2.1 不在需要的Bitmap,要及時調用recycle()進行銷毀。

2.2 設當的時候,使用Bitmap的時候,可以設定一定的采樣率

3.Cursor

我們在讀取第三方應用或者系統的ContentProvider的時候,通常會通過調用getContentResolver()的增删改查方法,獲得Cursor對象,然後進行操作。操作完成後,務必要記得關掉!

4.ListView和GridView

ListView和GridView要進行View的複用,不懂複用的程式員,不是合格的android程式員。

5.自定義控件

我們自己經常通過View或者SurfaceView自定義自己的控件,通常會使用一個Thread,定期的去繪制,View通常使用postInvalidate()和onDraw()方法配合等等,注意:我們Override它的onDetachWindow方法的時候,要記得及時停止線程的繪制和資源的釋放,特别是一些圖檔資源。

6.BroadcastReceiver一定要檢查register和unregister的成對出現。

7.Handler使用的時候,要聲明為static

8.我們在單例模式下的内中的java 容器,如List,Queue,Stack,Map等,在适當的時候,要及時調用clear方法,因為,如果這些容器依然保留那些不再适用的對象的引用,JVM會認為該對象依然被引用,不會得到釋放,如果運用不恰當,會出現記憶體洩露。

..............................

記憶體的分析工具:

1.Eclipse中,打開DDMS視圖,選中我們應用的包名,我們可以Dump出我們應用的記憶體占用情況

2.Eclipse的第三上插件MAT(記憶體分析工具)

3.adb指令

我們可以通過如下步驟:

a). adb shell

adb進入手機

b). ps

檢視所有的程序和包名,注意,我們需要檢視,我們的應用對用的包名和pid(程序ID)

c). dumpsys meminfo <應用對用的pid>

通過該指令來檢視記憶體的占用情況。

如下圖是chrome浏覽器的記憶體占用情況:

android:記憶體優化總結

我們可以不斷的通過操作我們的應用,實時檢視記憶體的占用情況,以定位問題。

未經允許不得用于商業目的