安卓有效避免oom

来源:互联网 发布:广数系统g76怎么编程 编辑:程序博客网 时间:2024/05/22 10:30

         android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。

       一般来说避免oom的方法有这么4种:

     1.严格控制内存 bitmap对象在java和C中都有内存占用。即使java回收了bitmap对象,C中的是不会自动释放的。所以需要及时调用recycle函数并去掉强引用,然后提醒虚拟机回收;

    2.使用缓存,缓存也分内存缓存和硬盘缓存;

   3.捕获异常。一旦加载图片产生异常,捕获并且把默认的图片显示上去;

   4.压缩图片。BitmapFactory的options是否自适应这个属性设为true,这样,decodeFile时得到的对象是空的,但是能得到该图片的大小,此时再判断是否需要压缩。

   这里非常不建议大家使用createScaledBitmap这个函数,经过测试该函数生成的bitmap对象动辄3M以上,十分危险。

  比较好的方法是decodeStream,可以避开java底层函数createdBitmap。decodeFile也不错,然后靠Matrx生成合适大小的图片。