首页
社区
课程
招聘
[求助]多个页面加载图片时出现OOM
发表于: 2013-7-29 23:31 6657

[求助]多个页面加载图片时出现OOM

2013-7-29 23:31
6657
在百度、google一直没找到解决方案,都是同一篇文章转来转去的,在此大虾帮帮忙分享你的代码

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
处理图像最容易OOM的~因为Android对每个Dalvik虚拟机是有内存限制到,好像是16M,程序中图片又是相当耗内存的,不调整精度,动不动就会OOM的~ 解决办法百度一大堆,给你一个官方的处理方式:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
旁边还有google的sample
2013-8-24 19:42
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
一直以来,碰上图片导致的OOM都是通过软引用+图片缩放来完成的,图片缩放大致就是用 BitmapFactory.Option设置 inSimpleSize,然后用BitmapFactory来产生图片,记得及时recyle,也可以通过软引用 SoftReference 来完成,具体的百度上有文章的
2013-9-9 23:35
0
雪    币: 153
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
OOM问题图片缩放,但要注意同一张图片多处引用问题,最好在每个页面加载时set,ondestroy时释放。
//生成对象
public Drawable getResourceDrawable(int rid) {
        return new BitmapDrawable(BitmapFactory.decodeStream(mContext
                        .getResources().openRawResource(rid)));
}
//释放
public void reCycleBitmapDrawable(View iv) {
        Bitmap bt = null;
        if (iv == null) {
                return;
        }
        if (iv.getBackground() == null) {
                return;
        }
        iv.getBackground().setCallback(null);
        iv.unscheduleDrawable(iv.getBackground());
        bt = ((BitmapDrawable) iv.getBackground()).getBitmap();
        if (bt != null && !bt.isRecycled()) {
                bt.recycle();
                bt = null;
        }
        iv.setBackgroundDrawable(null);
        iv = null;
}
//每个界面调用时采用
***.setBackgroundDrawable(getResourceDrawable(R.drawable.***));
//ondestroy时释放
if (***!= null) {
        reCycleBitmapDrawable(***);
        ***= null;
}
2013-9-24 11:13
0
游客
登录 | 注册 方可回帖
返回
//