您的位置:首页 > 移动开发 > Android开发

Android之常见异常总结--OOM --解决办法

2015-04-22 10:28 253 查看
看过其他大神写过关于OOM的文章,总感觉不是自己想要的,跟自己想的不能串联起来。所以就自己总结了一下,仅供博友们参考!!

我认为大概需要搞定一下两方面足以:

一、加载大图片的时候要压缩

获取屏幕大小、只加载图片信息、计算压缩比--图像/屏幕、压缩图片显示

BitmapFactory.Options参数,将这个参数的inJustDecodeBounds属性设置为true,

1. 只填加图片的宽高属性得到options,然后 options.inJustDecodeBounds = false;  

2.     return BitmapFactory.decodeResource(res, resId, options); 

二、使用图片缓存技术

思路:

1、始终从cache中去取Bitmap,如果取到Bitmap(如果找到了相应的键值),就直接把这个Bitmap设置到ImageView上面。

      2、如果缓存中不存在,那么启动一个task去加载(可能从文件来,也可能从网络)。

 1、 AsyncTask<>

   这个类也是一个很重要也很常用的类。它封装了Thread和Handler、内部也是用到了线程池,我们使用就更加方便,不用关注Handler。

1、        onPreExecute():在UI线程里面调用,它在这个task执行后会立即调用。

2、        doInBackground(Params...):这个方法从名字就可以看出,它是运行在后台线程的,在这个方法里面,去做耗时的事情,比如下载访问网络,操作文件等。

3、        onPostExecute(Result):当task结束后调用,它运行在UI线程。

 

     2、  LruCache

(此类在android-support-v4的包中提供)
。这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap
中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。添加一个Bitmap方法和getBitmap()

3、内存泄漏怎么检查

OOM调试:DDMSàheapà点击选中想要监测的进程à点击Heap视图中的“Cause
GC”按钮
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android oom 图片 压缩