ImagerLoader的原理
来源:互联网 发布:薪酬优化 密件工资单 编辑:程序博客网 时间:2024/05/01 20:10
Android Universal Image Loader 是一个强大的、可高度定制的图片缓存 。
简单的说 UIL 就做了一件事——获取图片并显示在相应的控件上。
整个库分为 ImageLoaderEngine, Cache 及 ImageDownloader , ImageDecoder , BitmapDisplayer , BitmapProcessor 五大模块,其中 Cache 分为 MemoryCache 和 DiskCache 两部分。
简单的讲就是 ImageLoader 收到加载及显示图片的任务,并将它交给 ImageLoaderEngine , ImageLoaderEngine 分发任务到具体线程池去执行,任务通过 Cache 及 ImageDownloader 获取图片,中间可能经过 BitmapProcessor 和 ImageDecoder 处理,最终转换为 Bitmap 交给 BitmapDisplayer 在 ImageAware 中显示。
注释:
mageLoaderEngine:任务分发器,负责分发 LoadAndDisplayImageTask 和 ProcessAndDisplayImageTask 给具体的线程池去执行,本文中也称其为 engine ,具体参考 4.2.6 ImageLoaderEngine.java 。
ImageAware:显示图片的对象,可以是 ImageView 等,具体参考 4.2.9 ImageAware.java 。
ImageDownloader:图片下载器,负责从图片的各个来源获取输入流, 具体参考 4.2.22 ImageDownloader.java 。
Cache:图片缓存,分为 MemoryCache 和 DiskCache 两部分。
MemoryCache:内存图片缓存,可向内存缓存缓存图片或从内存缓存读取图片,具体参考 4.2.24 MemoryCache.java 。
DiskCache:本地图片缓存,可向本地磁盘缓存保存图片或从本地磁盘读取图片,具体参考 4.2.38 DiskCache.java 。
ImageDecoder:图片解码器,负责将图片输入流 InputStream 转换为 Bitmap 对象, 具体参考 4.2.53 ImageDecoder.java 。
BitmapProcessor:图片处理器,负责从缓存读取或写入前对图片进行处理。具体参考 4.2.61 BitmapProcessor.java 。
BitmapDisplayer:将 Bitmap 对象显示在相应的控件 ImageAware 上, 具体参考 4.2.56 BitmapDisplayer.java 。
LoadAndDisplayImageTask:用于加载并显示图片的任务, 具体参考 4.2.20 LoadAndDisplayImageTask.java 。
ProcessAndDisplayImageTask:用于处理并显示图片的任务, 具体参考 4.2.19 ProcessAndDisplayImageTask.java 。
DisplayBitmapTask:用于显示图片的任务, 具体参考 4.2.18 DisplayBitmapTask.java 。
流程图:
1.UI请求数据,使用唯一的key值索引Memory Cache中的Bitmap
2.内存缓存:缓存搜索,如果能找到key值对应的Bitmap,则返回数据,否则执行第三步;
3.硬盘缓存:使用唯一的key值对应的文件名,检索SDCard上的文件
4.如果有对应文件,使用BitmapFactory.decode*方法,解码Bitmap并返回数据,同时将数据写入缓存,如果没有过对应文件,执行第五步.
5.下载图片:启动异步线程,从数据源下载数据
6.若下载成功,将数据同时写入硬盘和缓存.并将Bitmap显示在UI中;
- ImagerLoader的原理
- imagerloader的使用
- ImagerLoader 的使用
- Imagerloader
- ImagerLoader 的使用和配置 以及存储
- ImagerLoader缓存到SdCard
- imagerloader(简单写法)
- ImagerLoader 使用详解
- Xlistview(异步、Imagerloader、POST)
- 获取json解析 图片,文字+MyAsyncTask+ImagerLoader
- AsyncTask封装为工具类+Imagerloader
- POST解析(Imagerloader、异步、图片、文字、listv显示)
- Imagerloader将图片存到sd卡并且可以清除
- 数字证书的工作原理(加密原理)
- DNS劫持原理、DNS 污染的原理
- 搜索引擎算法原理 百度算法的原理 [
- 舵机的相关原理与控制原理
- quagga 的原理解析 zebra原理解析
- 报表导出功能
- 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- linux中利用有名管道实现进程之间的通信
- leafletjs 地图挂饼图
- Android 去除 bitmap 无用的白色边框
- ImagerLoader的原理
- java调用微信群发接口
- 自适应网页
- Swift - 进度条(UIProgressView)的用法
- 服务器启动org.apache.catalina.deploy.WebXml addFilter错误
- 枚举
- linux9.0安装VMware Tools问题解决
- 在AlertDialog中使用EditView时如何弹出软键盘
- Android基础总结:1像素密度