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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Bitmap OutOfMemory 解决办法

發(fā)布時間:2023/12/3 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Bitmap OutOfMemory 解决办法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Android Bitmap OutOfMemory 解決辦法

置頂?2014年07月01日 14:41:22?閱讀數(shù):3072?標(biāo)簽:?OutOfMemoryBitmapandroid圖片優(yōu)化更多

個人分類:?異常問題和解決辦法

??????在Android應(yīng)用里,最耗費內(nèi)存的就是圖片資源。而且在Android系統(tǒng)中,讀取位圖Bitmap時,分給虛擬機(jī)中的圖片的堆棧大小只有8M,如果超出了,就會出現(xiàn)OutOfMemory異常

E/AndroidRuntime(? 697): java.lang.OutOfMemoryError
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:376)
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:406)
E/AndroidRuntime(? 697): ?? ?at com.example.imagetoshow2.ImageAdapter.createReflectedImages(ImageAdapter.java:66)
E/AndroidRuntime(? 697): ?? ?at com.example.imagetoshow2.ImageAdapter.getView(ImageAdapter.java:54)
E/AndroidRuntime(? 697): ?? ?at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193)

解決辦法:

1.及時回收內(nèi)存

?
  • if(bitmap != null && !bitmap.isRecycled()){

  • // 回收并且置為null

  • bitmap.recycle();

  • bitmap = null;

  • }

  • System.gc();

  • 在適當(dāng)?shù)牡胤绞褂蒙鲜龃a,將暫時不需使用的的回收掉,當(dāng)然system.gc不應(yīng)該頻繁調(diào)用,否則會使系統(tǒng)效率降低。

    ?

    ?

    2.使用BitmapFactory.Options對圖片進(jìn)行壓縮

    ?

    ?
  • BitmapFactory.Options opts = new BitmapFactory.Options();

  • opts.inSampleSize = n;

  • ?
  • bitmap = BitmapFactory.decodeStream(fis, null, opts);


  • 使用inSampleSize設(shè)置放縮比例,默認(rèn)值為0,設(shè)置一個大于0的數(shù)便可對圖片進(jìn)行壓縮。

    ?

    ?

    ?
  • BitmapFactory.Options opts = new BitmapFactory.Options();

  • ?
  • // 設(shè)置inJustDecodeBounds為true

  • ?
  • opts.inJustDecodeBounds = true;

  • ?
  • // 使用decodeFile方法得到圖片的寬和高

  • ?
  • BitmapFactory.decodeFile(path, opts);


  • 使inJustDecodeBounds為true后,再使用decodeFile()等方法,并不會真正的分配空間,即解碼出來的Bitmap為null,只會計算出options.outWidth和options.outHeight值,在下次使用BitmapFactory的decodeFile()等方法實例化Bitmap對象前,將opts.inJustDecodeBound設(shè)置回false就可以得到圖片了。

    ?

    3.代碼優(yōu)化

    為了避免應(yīng)用在分配Bitmap內(nèi)存的時候出現(xiàn)OutOfMemory異常停止運行,通常,在實例化Bitmap的代碼中,對OutOfMemory異常進(jìn)行捕獲

    ?
  • <span style="font-size:18px;"> <span style="font-size:18px;">Bitmap bitmap = null;

  • try {

  • // 實例化Bitmap

  • bitmap = BitmapFactory.decodeFile(path);

  • } catch (OutOfMemoryError e) {

  • //

  • }</span></span>

  • 然后在Catch部分做一些內(nèi)存回收操作,或者是使用緩存圖片等...

    總是良好的編程風(fēng)格和優(yōu)質(zhì)的代碼結(jié)構(gòu)是程序員的無上追求....

    ?

    ?

    https://blog.csdn.net/tangnengwu/article/details/36185361

    https://blog.csdn.net/zhuwentao2150/article/details/52097344

    總結(jié)

    以上是生活随笔為你收集整理的Android Bitmap OutOfMemory 解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。