glide 之 BitmapPool 详解
来源:互联网 发布:网络连接但是不能上网 编辑:程序博客网 时间:2024/06/05 20:01
转载自:http://blog.csdn.net/shangmingchao【商明超的博】 (function () {('pre.prettyprint code').each(function () { var lines = (this).text().split(′\n′).length;var numbering = $('(this).addClass(′has−numbering′).parent().append( numbering); for (i = 1; i
BitmapPool
Dalvik和ART都没有使用compacting garbage collector垃圾回收模式,这种模式中GC会遍历堆,同时把活跃对象移到相邻内存区域,让更大的内存块可以用在后续的分配中。因为安卓没有这种模式,就可能会出现被分配的对象分散在各处,对象之间只有很小的内存可用。如果应用试图分配一个大于邻近的闲置内存块空间的对象,就会导致OOM崩溃,即使总的空余内存空间大于要分配的对象的大小。
而且,同步GC时会暂停所有线程(包括UI主线程)以便进行GC,虽然暂停时间很短,但频繁的同步GC会造成页面卡顿,从而影响用户体验。
因此为了避免频繁的创建以及回收Bitmap对象,进而减少GC的出现,可以使用BitmapPool统一的管理Bitmap的创建以及重用。 BitmapPool
接口就是用来重用Bitmap对象的。
该接口定义的方法:
- int getMaxSize();
- 获得BitmapPool的最大容量大小(单位是字节)。
- void setSizeMultiplier(float sizeMultiplier);
- 动态同步地调整BitmapPool的容量大小为 sizeMultiplier*原来容量大小 ,如果乘了系数后比最大容量大了,则应该清理出BitmapPool中的一部分Bitmap。sizeMultiplier必须是(0,1)之间的浮点数。
- boolean put(Bitmap bitmap);
- 添加给定的Bitmap到BitmapPool,如果可以添加就返回true,否则返回false。 注意:如果添加该Bitmap失败了(返回了false),调用者应该负责该Bitmap的回收(调用recycle()方法)。而且添加成功后马上同步被踢出了也会返回true,只有不符合添加条件(Bitmap是不可改变的或Bitmap比BitmapPool容量还要大)才会返回false。
- Bitmap get(int width, int height, Bitmap.Config config);
- 返回一个正好匹配给定宽、高和配置的只包含透明像素的Bitmap。如果BitmapPool中找不到这样的Bitmap,就返回null。
由于该方法会擦除Bitmap中的所有像素,所以要比getDirty(int, int, Bitmap.Config)
方法略慢一点。如果Bitmap用于BitmapFactory或其它每个像素都被覆盖或清除的场景,用getDirty(int, int, Bitmap.Config)
显然更快一点。当然,为了确保正确性用该方法也可以。
实现该方法时可以使用bitmap.eraseColor(Color.TRANSPARENT);清除所有像素。 - Bitmap getDirty(int width, int height, Bitmap.Config config);
- 和
get(int, int, Bitmap.Config)
方法一样,只是返回的任何非空Bitmap对象都可能包含未擦除的像素数据或随机数据。 - void clearMemory();
- 移除BitmapPool中所有的Bitmap。
- void trimMemory(int level);
- 根据给定level移除部分Bitmap。
0 0
- glide 之 BitmapPool 详解
- 图片加载框架之Glide详解记录
- Glide详解
- Glide详解
- Glide 详解
- Glide详解
- glide 详解
- Glide详解
- Glide图片框架使用详细介绍(五)之Glide-源码详解
- Android之Glide使用详解--集成、配置、使用、特性
- Android图片加载框架之Glide使用详解
- Glide使用详解
- Glide 使用详解
- Glide的使用详解
- Glide使用详解
- Glide使用详解
- Glide使用详解
- Glide用法 框架详解
- MyBatis学习--mybatis开发dao的方法
- Struts拦截器的第一个案例
- AndroidStudio theme之font
- SQL语句高级查询
- Postgresql学习笔记 --- PG::Error: ERROR: new encoding (UTF8) is incompatible
- glide 之 BitmapPool 详解
- HDU1253 胜利大逃亡 (BFS)
- MFC CDC绘制直线 折现 椭圆 ...
- 在做自动化测试之前你需要知道的
- 学三维动画要用数位板吗?
- iOS之PCH文件的使用
- DataBinding快速入门(还在用findViewById?)
- redis:spring-data-redis
- 算法学习之- 动态规划