【Android】Bitmap加載圖片錯誤 java.lang.OutOfMemoryError: bitmap size exceeds VM budget


今天測試程序的時候出現下面的錯誤日志信息,程序當場掛掉

07-09 14:11:25.434: W/System.err(4890):     java.lang.OutOfMemoryError: bitmap size exceeds VM budget
07-09 14:11:25.435: W/System.err(4890):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
07-09 14:11:25.435: W/System.err(4890):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:511)
07-09 14:11:25.435: W/System.err(4890):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:325)
07-09 14:11:25.435: W/System.err(4890):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:350)

使用Bitmap加載圖片的方法是這樣的

     vipAvatar = (ImageView) findViewById(R.id.vip_avatar);
        File file = new File(Environment.getExternalStorageDirectory()
                + IMAGE_FILE_NAME);
        if (file.exists()) {
           Bitmap bitmap = BitmapFactory.decodeFile(Environment
                    .getExternalStorageDirectory() + IMAGE_FILE_NAME);
            Drawable drawable = new BitmapDrawable(bitmap); vipAvatar.setImageDrawable(drawable);
        } 

在使用BitmapFactory.decodeFile的時候出錯了,查找原因

android系統限制,只給圖片分配8兆的內存,超過就崩,你圖片幾十KB,可能是壓縮格式的,轉換成bitmap就是本來的大小。

增加VM的設置不太現實,如果是在模擬器上沒問題,但是考慮到真機使用,問題還是要解決的。

這里使用了一種方法,上述情況沒有出現,方法是

在退出Activity時,將bitmap回收

  @Override
    protected void onDestroy() {
        if (bitmap != null && !bitmap.isRecycled())
            bitmap.recycle();
        super.onDestroy();
    }

 

//////////////////////////////////////////////

原創聲明 轉載請注明

本文出自 Ray-Ray的博客

文章地址 http://www.cnblogs.com/rayray/p/3180017.html

感謝大家的推薦和收藏

你的支持! 我們的動力!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM