android 記憶體最佳化

來源:互聯網
上載者:User

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?
  1. // 先判斷是否已經回收
  2. if(bitmap != null && !bitmap.isRecycled()){
  3. // 回收並且置為null
  4. bitmap.recycle();
  5. bitmap = null;
  6. }
  7. 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(檢查)

    回顧檢查你的程式,看看設計或代碼有什麼不合理的地方。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.