Android 图片内存回收的方法

最近在做一个关于应用市场的类似apk,用到的图片比较多,比较容易造成oom,查看了网络很多资料,这里总结下几个方法。
1、这个最简单,也就是后台服务端给的图片尽量小点,这样我们显示的时候占用的内存就会小很多,我内存oom的问题有一部分原因就是因为服务端给的图片太大,而且是显示在电视上的,大屏显示,占用的内存就更多了

2、使用完图片时要回收。Android把占用图片的内存不是放在java层,所以需要我们自己手动去释放内存。当一个bitmap不需要引用时,我们自己recycle它。
if (bitmap != null && !bitmap.isRecycled()) {
                    bitmap.recycle();
                }
当然,这样会很容易报错,说引用了被回收的对象,这就需要我们判断好是不是还需要这个bitmap对象了。

3、在使用imageview的时候,在activity销毁时回收此imageview的图片资源。由于我做的是展示app的一些详细信息,里面肯定会有很多的推荐图片,这时用的就是imageview。在ondestroy里面获取此imageview对象,回收此图片资源。
 public void releaseImageViewResouce(ImageView imageView) {
            if (imageView == null) return;
            Drawable drawable = imageView.getDrawable();
            if (drawable != null && drawable instanceof BitmapDrawable) {
                BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
                Bitmap bitmap = bitmapDrawable.getBitmap();
                if (bitmap != null && !bitmap.isRecycled()) {
                    bitmap.recycle();
                }
            }
        }

4、由于是下载网络图片,我是先把图片下载到本地,在从本地读取图片。由于有的图片可能比较大,这样读取所耗的内存也就增大了,我们在读取的时候可以先对图片进行处理,压缩比例或者设置读取的格式,这样可以减少所占用的内存
  private Bitmap buildThum(String path) throws FileNotFoundException {  

            Bitmap bitmap = null;

                         BitmapFactory.Options options = new BitmapFactory.Options();  
                         options.inPreferredConfig = Config.RGB_565;
                         options.inJustDecodeBounds = true; // 设置了此属性一定要记得将值设置为false  
                         bitmap =BitmapFactory.decodeFile(path,options);  
                         options.inJustDecodeBounds = false;  
                         int be = options.outWidth/394;  
                         if (be <= 0) {  
                             be = 1;  
                         }  
                         options.inSampleSize = be;  

                         bitmap = BitmapFactory.decodeFile(path,options);  

            return bitmap;  

    }  

这个方法是读取图片时对图片进行压缩显示。比如一个imageview的大小只是394*272(这个是我要显示的大小),而图片却比这个大很多,这时就可以用上面的方式读取图片options.inSampleSize是压缩的比例大小,这个根据你自己的需要进行设置

    5、使用imageloader开源项目。这个开源项目真的很强大,可以读取网络、本地的图片,其中对图片的缓存做了很好的处理。具体的源码没有去看过,不过用起来很方便,大家可以去试试。

至于还有没有其他方法,暂时还不知道,这里说明的只是我用到的一些处理方式,若有其他更好的方法希望大神能回复下,虚心请教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值