ImageLoader原理分析
来源:互联网 发布:辐射4卡顿优化 编辑:程序博客网 时间:2024/05/17 02:00
ImageLoader使用了一段时间,现总结归纳一下ImageLoader的实现原理。
下面是ImageLoader实现原理图:
大家都知ImageLoader使用的时候分两步:
第一步,初始化ImageLoader,ImageLoader是单例模式,一般在android中application中初始化就可以,如果多次初始化,那么会以最后一次为主;
第二步,调用dispalyimage方法显示网络图片。
根据以上使用步骤,我们一起看一下里面的实现过程。
第一步中ImageLoader在初始化的时候,调用ImageLoader类的init方法,int()方法传入imageloderConfiguration配置信息,imageloderConfiguration的初始化采用建造者模式进行配置,可配置线程池大小、使用缓存形式、缓存池大小、内存缓存形式、线程池等内容。在init方法中将imageloderConfiguration配置信息,作为参数初始化imageloderengine执行引擎。
imageloderengine中有三个线程池taskDistributor(任务调度线程池,也是由配置线程大小指定的线程池大小)、taskExecutor(负责需要网络下载,还未下载的线程池)、
taskExecutorForCachedImages(处理已经下载的图片处理线程池);需要处理的对象集合cacheKeyForImageAwares(HashMap集合),一个的具体执行任务线程均为LoadAndDispalyImageTask线程,
第二步在调用DispalyImage的时候,判断对象是否在需要处理的队列中,如果有先将其移除,对imageAres处理(圆角处理或是保持不变),然后在内存缓存中查找是否对应的网络图片,如果在会使用softreference加载,供给imageAres使用。获取完图片资源会提交给执行引擎imageloderengine。调用imageloderengine中的submit方法提交,submit中调用taskDistributor分发线程池对任务进行分发给taskExecutor或taskExecutorForCachedImages。具体任务LoadAndDispalyImageTask线程继承Runnable,其贤判断缓存中是否对应缓存数据,如果没有从网络下载并把数据存放到磁盘缓存中。数据读取完会根据监听处理对应的数据。
- ImageLoader原理分析
- ImageLoader原理分析
- imageLoader 原理
- ImageLoader的原理
- 理解ImageLoader的原理
- Universal ImageLoader源码分析
- universal imageloader源码分析
- ImageLoader的简单分析
- ImageLoader源码分析
- ImageLoader源码分析(一)ImageLoader初始化
- ImageLoader的原理以及定制
- ImageLoader加载图片,实现原理。。。
- Universial-imageloader的cache原理
- ImageLoader的简单分析(二)
- ImageLoader简单分析(三)
- 【从零开始写一个简单的ImageLoader框架】ImageLoader分析
- 图片加载类ImageLoader原理总结
- ImageLoader
- python web自动化测试,入门篇
- PHP 底层的运行机制与原理解析
- [转]事件过滤器 eventFilter
- idea使用maven配置mybatis环境以及idea中集成log4j
- IDEA上集成log4j将SQL语句打印出来
- ImageLoader原理分析
- 初识MyBatis
- yii2的事务处理
- txt文件内容修改
- iOS设置UILabel的不同颜色字体
- Maven工程如何将本地jar包引入到工程中
- CSS之两栏固定布局(一)
- C语言图书管理系统
- web.xml配置详解