使用glide填过的各种坑
来源:互联网 发布:js如何获取class的值 编辑:程序博客网 时间:2024/05/21 17:53
使用版本glide-3.7.0
坑一:
无法手动刷新缓存,只能改变key添加自定义签名,我是将头像版本号放到key中了,因为取头像是根据手机号取的,头像url路径并不会变,而且首次加载时并不能拿到版本号。
builder.signature(new StringSignature(etag));
坑二:
从磁盘缓存加载头像时太慢,导致能看到由默认图变到头像的过程,给人感觉头像闪了一下,体验不好。因为glide的磁盘缓存加载逻辑放到了工作线程中,提高了滑动时的流畅度,但是也降低了加载速度,没想到好办法解决;
坑三:
服务器返回的是xml数据,需要解析完xml才能获取头像byte[],好在glide有现成的api
builder.asBitmap().imageDecoder(decoder)
public class XmlBitmapDecoder implements ResourceDecoder<InputStream, Bitmap> {private static final String ID = "XmlBitmapDecoder.com.chinamobile.rcs.contacts.glide";private String id;private final BitmapPool bitmapPool;public XmlBitmapDecoder(BitmapPool bitmapPool) {this.bitmapPool = bitmapPool;}@Overridepublic Resource<Bitmap> decode(InputStream is, int width, int height) throws IOException {AvatarModel avatarModel = Utils.stream2Avatar(is);byte[] datas = avatarModel.getData();Bitmap bitmap = BitmapFactory.decodeByteArray(datas, 0, datas.length);return BitmapResource.obtain(bitmap,bitmapPool);}@Overridepublic String getId() {if (this.id == null) {this.id = ID;}return this.id;}}坑四:
消息列表中因为有不同的消息类型,默认头像也不一样,glide占位图不设置时,会设置null,所以onLoadStarted方法里需要区分开;
坑五:
token验证,切圆角图,这个相对容易实现
坑六:
某些场景需要跳过缓存强制从网络拉取,但是需要先用缓存的头像当占位图,这点上glide没有开放现成的api,实现方式有点迂回:
DrawableTypeRequest<MyGlideUrl> builder = Glide.with(mContext).using(new StreamModelLoader<MyGlideUrl>() {@Overridepublic DataFetcher<InputStream> getResourceFetcher(final MyGlideUrl model, int arg1, int arg2) {return new DataFetcher<InputStream>() {@Overridepublic InputStream loadData(Priority priority) throws Exception {throw new IOException();// do nothing}@Overridepublic void cleanup() {}@Overridepublic String getId() {return model.getCacheKey();}@Overridepublic void cancel() {}};}}).load(glideUrl);重点是loadData里边不做任何事,正常情况下这里本该写从网络拉取头像获取输入流的逻辑。这样就能变相实现从缓存拿到bitmap。
坑七:
还是加载慢的问题,但是有时候从memory缓存里加载竟然也需要50,60ms,打开glide调试,发现从缓存加载只需要零点几毫秒,但是从我代码调用到真正发起请求竟然用了大部分时间,有人说是得到view宽高后才会发起请求,于是添加.override(w, h),效果不明显。
已经决定自己实现一套头像加载逻辑了,用第三方的实在是不够灵活
0 0
- 使用glide填过的各种坑
- Glide使用,踩过的坑
- 那些年一起填过的坑
- 学习 Reflux 填过的坑
- 学习 Reflux 填过的坑
- BMap的使用填坑
- 关于使用Glide的一点小坑
- Glide使用过程中遇到的坑
- 使用Glide遇到的一些坑
- Android - Glide的使用
- Android - Glide的使用
- Glide 的基本使用
- Glide的简单使用
- Glide的使用
- Glide的使用
- Glide的简单使用
- Glide的使用
- Glide的使用
- List集合去除重复对象及equals()、hashCode()方法的作用
- 12.JAVA基本数据类型
- BPM配置故事之案例13-触发消息通知
- CS架构和BS架构的区别
- API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全。
- 使用glide填过的各种坑
- openstack中代码调试方法
- 比特币核心钱包(Bitcoin Core)的使用入门指南
- 人文胜地
- java-访问修饰符public,private,protected,以及不写(默认)时的区别
- Java中hashCode的作用
- awk命令练习
- 画太极
- git commit的常用命令