单张图片加载模型

单张图片加载模型

图片加载步骤:

根据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

android uil,Android UIL图片加载框架学习相关推荐

  1. Android中常见的图片加载框架

    图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...

  2. android uil,Android UIL图片加载框架学习

    单张图片加载模型 单张图片加载模型 图片加载步骤: 根据uri 定位到文件,本地磁盘文件,Assert 文件,res 资源文件,network 网络文件等: 从图片文件中获取流数据到内存,这个过程可以 ...

  3. Carson带你学Android:主流开源图片加载库对比(UIL、Picasso、Glide、Fresco)

    前言 图片加载在 Android开发项目中十分常见 为了降低开发周期 & 难度,我们经常会选用一些图片加载的开源库,而现在图片加载开源库越来越多,我们应该选用哪种呢? 今天.我就给大家介绍 & ...

  4. Android高效异步图片加载框架

    概述 Android高效异步图片加载框架:一个高效的异步加载显示的图片加载框架,同时具备图片压缩,缓存机制等特性. 详细 代码下载:http://www.demodashi.com/demo/1214 ...

  5. android教你打造独一无二的图片加载框架

    前言 首先,最近是在忙okhttp没错.不过或许有人问为什么忙着okhttp怎么又扯到了图片加载上了.其实,最近想实现下断点续传以及多文件下载,但并不知道怎么搞.群里有小伙伴提出了控制线程池来实现.然 ...

  6. Android 框架练成 教你打造高效的图片加载框架

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/41874561 ,本文出自: [张鸿洋的博客] 1.概述 优秀的图片加载框架不要 ...

  7. Android图片加载框架

    这篇文章主要和大家一起动手编写Android图片加载框架,从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,感兴趣的小伙伴们可以参考一下 开发一个简洁而实用的And ...

  8. Android Glide图片加载框架(四)回调与监听

    文章目录 Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图片加载框架(二)源码解析之with() Android Gl ...

  9. Android Glide图片加载框架(三)缓存机制

    文章目录 一.缓存简介 二.缓存用法 内存缓存方式 磁盘缓存方式 三.缓存KEY 四.内存缓存 内存缓存流程 五.磁盘缓存 磁盘缓存流程 Android Glide图片加载框架系列文章 Android ...

最新文章

  1. 7 个小仙女花3年时间写了一本1200页的机器学习算法手册(限时开放下载)
  2. iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观
  3. 腾讯计费全面开放,为你而来!
  4. ASP.NET 文件上传于下载
  5. 04.卷积神经网络 W2.深度卷积网络:实例探究(作业:Keras教程+ResNets残差网络)
  6. SpringBoot集成MyBatis-Plus框架
  7. C++ C++11新特性--右值引用
  8. kaggle房价预测特征意思_Kaggle初探--房价预测案例之数据分析
  9. Ubuntu快速搭建Jenkins持续集成平台
  10. Java重入函数_重入函数
  11. 各种投影灯泡的清零方法!
  12. ssh连接本地虚拟机
  13. n2n(Pear-to-pear) 内网穿透
  14. 开发者应该了解的移动互联网行业内幕
  15. leetcode 868. 二进制间距
  16. 聚焦人机交互智能应用领域,APISIX 在希沃网关的应用与实践
  17. Java LTS版本——Java 11新特性
  18. Flink学习笔记【巨详细!】(二)
  19. python面试题(六)——数据库mysql、redis篇
  20. 王半仙儿的日记-0010——“在人生的十字路口,没有人会迷茫,但有人会胆怯。勤奋成就万事。”

热门文章

  1. 小米盒子root及sshdroid安装
  2. Lombok @Slf4j 使用和配置
  3. 广域网边缘的技术革命
  4. 北邮信通导论第三单元焦耳小偷升压电路
  5. qt制作c语言万年历,基于QT实现的日历程序
  6. 【Node.js】制作Steam自动发货机器人(一)
  7. IT行业校企合作下一个10年何处去——美斯坦福首届校企合作人才培养论坛见真章
  8. 请你用严谨的数学语言证明一下庞加莱猜想
  9. 格斗游戏c语言代码,C/C++知识点之设计并编写代码自动格斗类游戏
  10. 人力资源SaaS系统哪家功能比较完善?