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浏覽器的記憶體占用情況:
我們可以不斷的通過操作我們的應用,實時檢視記憶體的占用情況,以定位問題。
未經允許不得用于商業目的