Bitmap问题

Bitmap是导致OOM的头号杀手,我在开发中就遇到了两个关于bitmap导致的内存泄漏。

1.pos机电子签名,需要在屏幕上面进行签名,创建了一个bitmap变量过大,导致的内存溢出。

2.使用照相机,扫描二维码,弹出来的预览画面需要放到临时变量里面,临时变量申请过大,导致内存溢出。

常用的总结操作如下:

1.recycle

Bitmap存在两个地方,java内存和native内存。recycle会释放和这个对象有关的native内存,和相关的引用。但是不是立即执行,而是通知GC。执行了recycle后,就不能执行相关的方法了,因为已经被标记为dead了,再调用相关方法会出现异常。google不建议主动去调用recycle方法,也会主动地清理内存。但是平时可以根据自己的场景来主动调用,养成良好习惯。

2.LRU

主要使用在存储bitmap的三级缓存,最近最少使用的缓存对象清除队列。

实现原理:通过泛型类,内部LinkedHashMap,提供对应的put get remove trimtosize(缓存满的时候移除较早较少使用的对象,添加新的缓存对象)。

3.计算inSamplesize

在合适的时间,加载合适的图片。根据maxWith,maxHeight计算最合适的inSampleSize,缩减比例。

4.缩略图

和inSampleSize分不开。

inJustDecodeBound,先设置为true。把图片加载进来,这是病不是真正的加载,而是获取到他的信息。然后在设置为false,计算出缩放比例,在设置为true。

5.三级缓存

1.网络,文件,内存;避免频繁的进行网络请求,导致ui卡顿。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2021期待与你一起共事,点击查看岗位[https://www.jianshu.com/p/6f4d67fa406...
    闲庭阅读 16,722评论 0 75
  • 目录介绍 01.如何计算Bitmap占用内存1.1 如何计算占用内存1.2 上面方法计算内存对吗1.3 一个像素占...
    杨充211阅读 4,343评论 1 9
  • 诗有意,人不慌。 桃李春风拂面亲。 羞煞浪花拍岸起。 挺胸挥毫墨生花。 喜欢词,因为词的不拘,如若不套词牌,更不喜...
    自来诗阅读 528评论 2 13
  • 感觉五个仰卧起坐已经是极限,做了不标准的六个今天也算是进步吧,腿总是翘起来,这样就不能抱头起来了,所以不标准。今天...
    cvgfty阅读 450评论 0 51
  • -中国球迷可以通过移动终端和个人电脑观看NBA整个赛季的赛事直播和其他精彩内容- 北京,2016年10月12日– ...
    游戏哥007阅读 406评论 0 0