android uil,Android UIL图片加载框架学习
单张图片加载模型
单张图片加载模型
图片加载步骤:
根据uri 定位到文件,本地磁盘文件,Assert 文件,res 资源文件,network 网络文件等;
从图片文件中获取流数据到内存,这个过程可以叫做load;
对流数据进行解码,得到原始图像数据Bitmap,这个过程叫做解码,decode ;
将bitmap设置给view 显示出来,这个过程叫display ;
注意事项:
图片解码过程中,单张图片解码出来的图片数据会达到很大,甚至导致应用出现oom的情况,需要谨慎对待;
图片显示过程中,View 的大小相对来说都是比较固定的,一张很大的图片显示在一个比较小的view
上面,显示效果不但得不到提升,而且还会消耗系统资源;
多张图片的缓存模型
多张图片加载的缓存模型
场景:
在界面的切换过程中,很多图片资源是共用的,我们的每一次图片显示都经过load,decode,display?
一张网络图片,上次从服务器下载下来了,下次用到的时候,还需要从服务器download,然后load,decode,display?
解决方案:
对于已经显示过得图片,将它存在内存中,下次再用的时候直接从内存中拿取;不用走整个的图片加载流程;
对于已经下载过得网络图片,保存在本地磁盘,再次加载的时候直接从磁盘读取,同时缓存到内存中,就不用再次从服务器下载了;
注意事项:
图片缓存在内存中,内存的大小始终是有限的,需要控制总的内存占用;
图片缓存到磁盘,磁盘的空间是有限的,需要有效的控制磁盘占用;
UIL 框架源码结构
———
UIL代码结构
流程控制:
ImageLoader 入口类;
ImageLoaderEngine 提供线程池;
XXXXXTask ,Runnable 接口实现类,具体的流程控制类,会被丢到线程池中执行 ;
具体的实现:
downloader 目录: 文件加载,从网络,本地,res ,assert 加载图片数据到内存中;
decode 目录:对加载进来的流数据进行解码,得到Bitmap 数据 ;
display 目录:对需要显示的bitmap数据进行处理,比如显示倒影,圆角等;
imageaware 目录: bitmap显示封装类,提供统一的图片数据显示方式;
listener 目录:图片加载过程的回调接口,通知流程进度和事件;
memory 目录:内存缓存模型,提供各种策略的缓存方式;
disc 目录:磁盘缓存模型,提供各种磁盘缓存方式;
类结构与加载模型对应关系
Paste_Image.png
类与流程
UIL 流程控制:ImageLoader 中生成Task ,提交到ImageLoaderEngine
中的线程池中执行;
具体的执行过程:downloader -> disc ->decode
->memory->display->imageaware ;
UIL类和流程.png
本站系本网编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除内容![声明]本站文章版权归原作者所有
内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。本站拥有对此声明的最终解释权
一、本站内收录的所有教程与资源均来自于互联网,其版权均归原作者及其网站所有,本站虽力求保存原有的版权信息,但由于诸多原因,可能导致无法确定其真实来源,请原作者原谅!如果您对本站教程与资源的归属存有异议,请立即通知优设,情况属实,我们会第一时间予以删除,并同时向您表示歉意!看着优设真诚的小眼神,绝对不是故意侵犯原作者版权的哦!如果您有优秀的作品,优设也会帮您在微博扩散推荐。
二、本站转载的教程与资源仅为资源共享、学习参考之目的,很难对其可用性、准确性或可靠性做出任何承诺与保证。本站无法对任何由于使用或无法使用本站提供的教程与资源所造成的损失负任何责任。
三、本站通过互联网转载的教程与资源,或是站内作者自己提供的教程与资源,版权均归原作者所有,未经原版权作者许可,任何人不得擅作他用!您可以复制、转载和传播本站的任何信息,但务必在转载时注明来源,尊重其知识产权,并自负版权等法律责任。
android uil,Android UIL图片加载框架学习
单张图片加载模型
单张图片加载模型
图片加载步骤:
根据uri 定位到文件,本地磁盘文件,Assert 文件,res 资源文件,network 网络文件等;
从图片文件中获取流数据到内存,这个过程可以叫做load;
对流数据进行解码,得到原始图像数据Bitmap,这个过程叫做解码,decode ;
将bitmap设置给view 显示出来,这个过程叫display ;
注意事项:
图片解码过程中,单张图片解码出来的图片数据会达到很大,甚至导致应用出现oom的情况,需要谨慎对待;
图片显示过程中,View 的大小相对来说都是比较固定的,一张很大的图片显示在一个比较小的view
上面,显示效果不但得不到提升,而且还会消耗系统资源;
多张图片的缓存模型
多张图片加载的缓存模型
场景:
在界面的切换过程中,很多图片资源是共用的,我们的每一次图片显示都经过load,decode,display?
一张网络图片,上次从服务器下载下来了,下次用到的时候,还需要从服务器download,然后load,decode,display?
解决方案:
对于已经显示过得图片,将它存在内存中,下次再用的时候直接从内存中拿取;不用走整个的图片加载流程;
对于已经下载过得网络图片,保存在本地磁盘,再次加载的时候直接从磁盘读取,同时缓存到内存中,就不用再次从服务器下载了;
注意事项:
图片缓存在内存中,内存的大小始终是有限的,需要控制总的内存占用;
图片缓存到磁盘,磁盘的空间是有限的,需要有效的控制磁盘占用;
UIL 框架源码结构
———
UIL代码结构
流程控制:
ImageLoader 入口类;
ImageLoaderEngine 提供线程池;
XXXXXTask ,Runnable 接口实现类,具体的流程控制类,会被丢到线程池中执行 ;
具体的实现:
downloader 目录: 文件加载,从网络,本地,res ,assert 加载图片数据到内存中;
decode 目录:对加载进来的流数据进行解码,得到Bitmap 数据 ;
display 目录:对需要显示的bitmap数据进行处理,比如显示倒影,圆角等;
imageaware 目录: bitmap显示封装类,提供统一的图片数据显示方式;
listener 目录:图片加载过程的回调接口,通知流程进度和事件;
memory 目录:内存缓存模型,提供各种策略的缓存方式;
disc 目录:磁盘缓存模型,提供各种磁盘缓存方式;
类结构与加载模型对应关系
Paste_Image.png
类与流程
UIL 流程控制:ImageLoader 中生成Task ,提交到ImageLoaderEngine
中的线程池中执行;
具体的执行过程:downloader -> disc ->decode
->memory->display->imageaware ;
UIL类和流程.png
本站系本网编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除内容![声明]本站文章版权归原作者所有
内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。本站拥有对此声明的最终解释权
一、本站内收录的所有教程与资源均来自于互联网,其版权均归原作者及其网站所有,本站虽力求保存原有的版权信息,但由于诸多原因,可能导致无法确定其真实来源,请原作者原谅!如果您对本站教程与资源的归属存有异议,请立即通知优设,情况属实,我们会第一时间予以删除,并同时向您表示歉意!看着优设真诚的小眼神,绝对不是故意侵犯原作者版权的哦!如果您有优秀的作品,优设也会帮您在微博扩散推荐。
二、本站转载的教程与资源仅为资源共享、学习参考之目的,很难对其可用性、准确性或可靠性做出任何承诺与保证。本站无法对任何由于使用或无法使用本站提供的教程与资源所造成的损失负任何责任。
三、本站通过互联网转载的教程与资源,或是站内作者自己提供的教程与资源,版权均归原作者所有,未经原版权作者许可,任何人不得擅作他用!您可以复制、转载和传播本站的任何信息,但务必在转载时注明来源,尊重其知识产权,并自负版权等法律责任。