1.什么是oom?
当前占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出 Out of memory 异常
我们知道每一个安卓系统都会个app分配一个独立的空间也就是我们知道的Dalvik虚拟机空间,这样每个app都可以独立的运行在自己的运行空间上,不受其他app的影响。但是我们知道Dalvik虚拟机都设置了最大内存的限制 。
大多数omm都是因为Bitmap加载有关
Bitmap :
1.图片的显示
当显示缩略图的时候不要调用网络请求
2.及时释放内存
我们知道Android有自己的垃圾回收机制也就是java的垃圾回收机制。他可以不定期的回收掉近期不使用的内存,他是不定期的你不能指定某一个时间段你调用gc回收。也就是说他肯定会回收掉Bitmap使用的这个空间。
那为什么要声明及时释放内存呢?
因为我们知道Bitmap他的构造方法都是私有的,他是通过自己的一个类来实例化这个Bitmap的。
所以说加载完Bitmap以后他是包含两个位置保存到内存中的,简单的说就是一部分是java区,一部分是C区
而这个Bitmap是由java部分分配的,最后由java的gc回收机制回收掉了,对应的C的那一部分区域是虚拟机不能被回收掉的,所以只能调用底层功能释放了,所以说我们在这里释放的内存就是C的这部分的内存。
3.图片压缩
如果我们刚开始要加载一个很大的图片,大到比系统给我们分配的都要的话,就肯定会造成内存溢出oom。
4.可以使用Bitmap的一个高级属性inBitmap
这个inBitmap这个属性可以告知Bitmap重复使用之前Bitmap占用的内存
5.捕获异常
Lru是最近最少使用的方式