日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget(转)

發布時間:2024/4/14 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

昨天遇到這個問題就是從一個輸入流里調用BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri))得到一個bitmap報的錯。第一次調用都沒問題,第二次再次調用就會報上面那個內存溢出的問題。而且有的手機報有的手機不報。研究了半天終于解決。首先分析了下原因,應該是圖片占用的內存超過了系統虛擬機可分配的最大限制。不同手機可能分配的最大值不一樣。后來找到解決辦法主要是設置BitmapFactory.Options。

  • BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
  • ? ? ? ? ? ? ? ?? ?? ?? ?bitmapOptions.inSampleSize = 4;
  • ? ? ? ? ? ? ? ?? ?? ?? ?bitmap = BitmapFactory.decodeStream(this.getContentResolver()..openInputStream(uri), null , bitmapOptions);
  • 復制代碼

    有的說要加上bitmapOptions.inJustDecodeBounds = true;但是我加上后得到的bitmap就為null。去掉之后就可以。按照上面的方法就解決問題了。最好把bitmap在不用的時候回收一下:

  • if (bitmap != null && !bitmap.isRecycled())
  • ? ? ? ? ? ? ? ? ? ? ? ? bitmap.recycle();
  • 復制代碼

    某位大神的圖片占用內存的算法:
    介紹一下圖片占用進程的內存算法吧。
    android中處理圖片的基礎類是Bitmap,顧名思義,就是位圖。占用內存的算法如下:
    圖片的width*height*Config。
    如果Config設置為ARGB_8888,那么上面的Config就是4。一張480*320的圖片占用的內存就是480*320*4 byte。
    前面有人說了一下8M的概念,其實是在默認情況下android進程的內存占用量為16M,因為Bitmap他除了java中持有數據外,底層C++的skia圖形庫還會持有一個SKBitmap對象,因此一般圖片占用內存推薦大小應該不超過8M。這個可以調整,編譯源代碼時可以設置參數。

    轉載于:https://www.cnblogs.com/manmanlu/p/4837317.html

    總結

    以上是生活随笔為你收集整理的Android解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。