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,其贤判断缓存中是否对应缓存数据,如果没有从网络下载并把数据存放到磁盘缓存中。数据读取完会根据监听处理对应的数据。


原创粉丝点击