安卓项目OOM

我这个项目模块太多,页面使用的高清图片也比较多,而且前期都要用静态图片加载写死,但是静态图片加载好几百张导致项目运行起来,滑动几个界面后就出现OOM了。之前做过的都是服务器加载图片处理OOM的方法,但是本地静态图片怎么降低内存,解决OOM问题?求大神解答

阅读 3.7k
6 个回答

用glide等图片框架呢?会自动压缩图片的 可能会好一点

我也碰到过,没有完全避免,但是可以尽量
1.本地图片加载适量压缩

   InputStream is = this.getResources().openRawResource(R.drawable.pic1);
    BitmapFactory.Options options = new  BitmapFactory.Options();
     options.inJustDecodeBounds =  false;
     options.inSampleSize =  10;   // width,hight设为原来的十分一
     Bitmap btp =  BitmapFactory.decodeStream(is, null,  options);

2.在application中加上:

      android:largeHeap="true"
      android:hardwareAccelerated="true"
      这样可以使用更大的内存,而不会报错

当然最根本的解决方法是在适当的时候回收内存。比如你说的滑动界面,可以在适配器中做判断,不显示的界面就让图片回收,滑动显示的时候重新加载

单图一般不会OOM吧,多图的话不需要高清的。大量的高清图不好处理,尽量用异步加载、压缩(压缩以后也就不算高清了)、多回收、滑动暂停加载。

  1. 没必要在同一个界面用大量高清图片, 最好不要超过 View 的大小了, 不然也没什么意义,

  2. 然后可以选择降低一些质量来减少占用...

  3. 然后再做其他操作的时候有选择得回收一下内存吧...

glide略优于Picasso(glide根据Picasso改进的),如果是大量使用图片的APP,可是用是Fresco,FaceBook的黑科技,图片缓存另外自己开辟的内存空间,吊炸天。(还有一些预加载模糊图片之类的,不过用起来稍微有点麻烦,个人感觉,因为要给图片至少一个明确的高度或宽度值,不然两个wrap_content不显示)

简单的做法,把图片格式转成webp,图片的质量没多少下降,但是图片的体积大大变小

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题