【Android 异常与性能优化】Bitmap相关
2018-02-19 14:01
387 查看
LRU
它用来清理最近最少使用对象,其内部是通过LinkedHashMap实现的。它提供了get和put方法来完成对象的添加和获取,当缓存满了它可以提供一个trimToSize方法来清理最近最少使用对象。我们来看下这个方法是如何实现的:可以看到这个方法会一直循环判断size是否小于maxSize,如果不小于maxSize,则会从LinkedHashMap中依次remove下一个元素,并调用safeSizeOf重新计算size。从这里可以看出,LinkedHashMap中按顺序存放着使用从最不频繁到最频繁的对象。那么怎么知道对象使用频繁还是不频繁呢?我们看下put方法是如何实现的?
what?从put代码来看,LinkedHashMap中存放的就按存储顺序排序的对象啊。难道不是按使用频繁度排序?频繁度跟什么相关?会不会是在get方法中有重新排序呢?我们来看下get方法。
可以看到在get方法中会不光只是从LinkedHashMap中get出一个对象,还把这个对象从LinkedHashMap中取出来放到最后一个位置。由此,使用最频繁的对象就被放到了最后面。
接下来我们看下safeSizeOf是如何实现的呢?
它其实调用的就是我们熟悉的sizeOf方法。
计算inSampleSize
我们知道Bitmap节省内存有很多种方法,其核心无非就是在合适的时机加载合适大小的Bitmap。现在的照片越来越大,如果把这些大图直接加载到内存当中,很容易内存溢出。下面我们来看下如何得到Bitmap缩减比例。计算缩略图
根据inSampleSize算出来的值,来相应地保存Bitmap。三级缓存
包括:网络、本地、内存三级缓存。它的原理是:当用户首次打开app从网络上去获取,当获取完成后,把结果保存到sd卡和内存当中。
最后
以上就是我总结的Bitmap优化的知识,后续还会陆续更新,如有任何疑问欢迎留言提问,博主每天都会查看。相关文章推荐
- Android性能优化系列之Bitmap图片优化
- Android性能优化:谈谈Bitmap的内存管理与优化
- android 内存优化以及性能优化相关问题
- Android——性能优化相关文章
- Android性能优化:Bitmap详解&你的Bitmap占多大内存?
- 【Android 异常与性能优化】冷启动优化
- Android性能优化之Bitmap的内存优化
- Android性能优化系列之Bitmap图片优化
- Android性能优化之Bitmap图片优化详解
- android性能优化的相关视频资料
- ANDROID性能优化:Bitmap
- 多线程提高android性能(有image相关优化内容)
- 【Android 异常与性能优化】UI卡顿相关
- Android异常与性能优化二
- Android性能优化二 电量优化、网络优化、对象池、bitmap解码率
- Android 性能优化(五)之细说 Bitmap
- Android性能优化相关
- 【Android 异常与性能优化】内存管理
- Android性能优化:谈话Bitmap内存管理和优化
- 【Android应用开发技术:图像处理】Bitmap显示性能优化分析