android一種引發記憶體溢出的原因和一種對應的解決方式

來源:互聯網
上載者:User

新的版本上線了,第二天就看到了反饋回來的錯誤,比較多的一個錯誤是java.lang.OutOfMemoryError: bitmap size exceeds VM budget,對於這樣的菜鳥看這個問題去修改那是不可能滴,我就看著老大去怎麼修改的。記憶體溢出一般是因為太多的圖片引起的,他就在思考圖片載入和清理的問題,想到了pad版本都沒有出現過類似的問題,為什麼手機版就出現了呢。大概的看了一下pad版本的代碼,突然想到了頁面跳轉之後忘了對圖片的緩衝進行回收,在代碼中加上
[java] 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if(checkImage != null) { 
        checkImage.clearBitmap(); 
    } 

       問題就得瞭解決,checkImage變數是用於處理圖片載入的問題。我們的用戶端對需要使用很多圖片,圖片在程式中的處理方式是第一步首先檢查記憶體中是否存在載入的圖片,第二步如果沒有就檢查本地(SD卡)中有沒有儲存的圖片,最後才是到伺服器端進行請求。系統本身會對記憶體進行相應的處理,但是因為圖片載入的比較多比較頻繁,如果不進行手動清理,也是容易出現記憶體溢出的問題的。
clearBitmap函數:
[java] 
public void <span style="font-size:18px; ">clear</span>Bitmap() { 
    if(hm != null) { 
        try { 
            Iterator<Map.Entry<String, Bitmap>> it = hm.entrySet().iterator(); 
            while(it.hasNext()) { 
                Map.Entry<String, Bitmap> entry = it.next(); 
                Bitmap bm = entry.getValue(); 
                bm.recycle(); 
                bm = null; 
            } 
            hm.clear(); 
        }catch (Exception e) { 
        } 
    }        

       另外遇到的一個問題就是一些null 指標的錯誤Caused by: java.lang.NullPointerException,這個問題出現的頻率也是比較大的一個,但是這個問題又不是自己 能夠解決的,屬於偶發性錯誤,對於這樣的錯誤,我們要做的只是保證用戶端不崩潰就行了,所以找到錯誤對應的行,查看null 指標大概出現的位置,然後使用try catch捕獲就行了,不需要進行別的任何的處理就行了。因為這個錯誤不會影響到下單和查看用戶端的一些重要的資訊。

 作者:walker02

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.