为什么要二次封装?
1.所有图片加载统一的管理,改动只改一处牵涉小;
2.如果第三方库不满足需求或停止维护,替换工作量小;
怎么实现封装
对外提供统一的ImageLoader ,这个类是不变的,具体执行由GlideLoader
> - ImageLoader.init(Context context) //初始化
> - ImageLoader.trimMemory(int level);
> - ImageLoader.clearAllMemoryCaches();
> - ImageLoader.getActualLoader(); //获取当前的loader
> - ImageLoader.with(Context context) //加载图片
> - ImageLoader.saveImageIntoGallery(String url) // 保存图片到相册
> - ImageLoader.pauseRequests() //取消请求
> - ImageLoader.resumeRequests() //恢复请求(当列表在滑动取消请求,滑动停止恢复请求)
> - ImageLoader.clearDiskCache()//清除磁盘缓存(必须在后台线程中调用)
> - ImageLoader.clearMomoryCache(View view) //清除指定view的缓存
> - ImageLoader.clearMomory() // 清除内存缓存(必须在UI线程中调用)
图片的各种设置信息--SingleConfig
> - url(String url) //支持filepath、图片链接、contenProvider、资源id四种
> - thumbnail(float thumbnail)//缩略图
> - rectRoundCorner(int rectRoundRadius, int overlayColorWhenGif) //圆角半径
> - colorFilter(int color) //颜色滤镜
> - asCircle(int overlayColorWhenGif)//加载圆形图片
> - placeHolder(int placeHolderResId) //占位图
> - scale(int scaleMode) // 裁剪缩放
> - animate( Animation animation) 引入动画
Glide的使用注意:降低内存和生命周期管理
1、升级到Glide4.0,使用asDrawable代替asBitmap,drawable更省内存
2、decode bitmap的时候,catch到OOM,可以尝试把采样比例再增加一倍之后,再次尝试decode
3、如果是处于 lowMemory 的时候,将图片的 DecodeFormat 设置为 RGB_565
4、使用glide自己的圆角图片。bitmapTransfrom
5、优化GIF framework中的工具包FrameSequence 继承 AppGlideModule,重写方法替换 原理就是一帧帧设置改为两个bitmap分别绘制和解析
6、onTrimMemory,调用 Glide.cleanMemroy() 清理掉所有的内存缓存。
1、不使用application作为context。当context为application时,会把imageView是生命周期延长到整个运行过程中,imageView不能被回收,从而造成OOM异常
2、当列表在滑动的时候,调用Glide的pauseRequests()取消请求,滑动停止时,调用resumeRequests()恢复请求。