android 記憶體最佳化
OOM
記憶體流失引發很多問題:
1:程式卡頓,響應速度慢(記憶體佔用高時JVM 虛擬機器會頻繁出發GC)
2:莫名其妙消失
3:直接崩潰
ANDROID 記憶體面臨的問題
1: 有限的堆記憶體,原始只有16M
2:記憶體大小消耗等根據裝置,作業系統等級,尺寸的不同而不同
3:程式不能直接控制
4:支援後台多任務處理
5:運行在虛擬機器之上
5R
1.Reckon(計算)
首先需要知道你的app所消耗記憶體的情況,知己知彼才能百戰不殆
2.Reduce(減少)
消耗更少的資源
3.Reuse(重用)
當第一次使用完以後,盡量給其他的使用
5.Recycle(回收)
回收資源
4.Review(檢查)
回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。
1.Reckon(計算)
首先需要知道你的app所消耗記憶體的情況,知己知彼才能百戰不殆
2.Reduce(減少)
消耗更少的資源
3.Reuse(重用)
當第一次使用完以後,盡量給其他的使用
5.Recycle(回收)
回收資源
4.Review(檢查)
回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。
Reduce :
reduce 意思就是減少,直接減少記憶體的使用,是最有效最佳化方法
Bitmap:
Bitmap 是記憶體消耗大戶,絕大多數的OOM崩潰都是在操作Bitmap 時產生的下面看看幾個處理圖片的方法
圖片顯示:
我們需要根據需求去載入圖片大小
例如在列表中僅用於預覽時載入縮圖
只有當使用者點擊具體條目想看詳細資料的時候,這時另啟動一個fragement /activity 對話方塊等等,去顯示整個圖片
1.Reckon(計算)
首先需要知道你的app所消耗記憶體的情況,知己知彼才能百戰不殆
2.Reduce(減少)
消耗更少的資源
3.Reuse(重用)
當第一次使用完以後,盡量給其他的使用
5.Recycle(回收)
回收資源
4.Review(檢查)
回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。
圖片大小:
直接使用ImageView顯示bitmap會佔用較多資源,特別是圖片較大的時候,可能導致崩潰。
使用BitmapFactory.Options設定inSampleSize, 這樣做可以減少對系統資源的要求。
屬性值inSampleSize表示縮圖大小為原始圖片大小的幾分之一,即如果這個值為2,則取出的縮圖的寬和高都是原始圖片的1/2,圖片大小就為原始大小的1/4。
1.Reckon(計算)
首先需要知道你的app所消耗記憶體的情況,知己知彼才能百戰不殆
2.Reduce(減少)
消耗更少的資源
3.Reuse(重用)
當第一次使用完以後,盡量給其他的使用
5.Recycle(回收)
回收資源
4.Review(檢查)
回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。
圖片像素:
Android中圖片有四種屬性,分別是:
ALPHA_8:每個像素佔用1byte記憶體
ARGB_4444:每個像素佔用2byte記憶體
ARGB_8888:每個像素佔用4byte記憶體 (預設)
RGB_565:每個像素佔用2byte記憶體
1.Reckon(計算)
首先需要知道你的app所消耗記憶體的情況,知己知彼才能百戰不殆
2.Reduce(減少)
消耗更少的資源
3.Reuse(重用)
當第一次使用完以後,盡量給其他的使用
5.Recycle(回收)
回收資源
4.Review(檢查)
回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。
圖片回收:
使用Bitmap過後,就需要及時的調用Bitmap.recycle()方法來釋放Bitmap佔用的記憶體空間,而不要等Android系統來進行釋放。
下面是釋放Bitmap的範例程式碼片段。
[java] view plaincopyprint?
- // 先判斷是否已經回收
- if(bitmap != null && !bitmap.isRecycled()){
- // 回收並且置為null
- bitmap.recycle();
- bitmap = null;
- }
- System.gc()
1.Reckon(計算)
首先需要知道你的app所消耗記憶體的情況,知己知彼才能百戰不殆
2.Reduce(減少)
消耗更少的資源
3.Reuse(重用)
當第一次使用完以後,盡量給其他的使用
5.Recycle(回收)
回收資源
4.Review(檢查)
回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。
到底什麼時候使用軟引用,什麼時候使用弱引用呢?
個人認為,如果只是想避免OutOfMemory異常的發生,則可以使用軟引用。如果對於應用的效能更在意,想儘快回收一些佔用記憶體比較大的對象,則可以使用弱引用。
還有就是可以根據對象是否經常使用來判斷。如果該對象可能會經常使用的,就盡量用軟引用。如果該對象不被使用的可能性更大些,就可以用弱引用。
另外,和弱引用功能類似的是WeakHashMap。WeakHashMap對於一個給定的鍵,其映射的存在並不阻止記憶體回收行程對該鍵的回收,回收以後,其條目從映射中有效地移除。WeakHashMap使用ReferenceQueue實現的這種機制。
1.Reckon(計算)
首先需要知道你的app所消耗記憶體的情況,知己知彼才能百戰不殆
2.Reduce(減少)
消耗更少的資源
3.Reuse(重用)
當第一次使用完以後,盡量給其他的使用
5.Recycle(回收)
回收資源
4.Review(檢查)
回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。
http://blog.csdn.net/a396901990/article/details/38707007
1.Reckon(計算)
首先需要知道你的app所消耗記憶體的情況,知己知彼才能百戰不殆
2.Reduce(減少)
消耗更少的資源
3.Reuse(重用)
當第一次使用完以後,盡量給其他的使用
5.Recycle(回收)
回收資源
4.Review(檢查)
回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。