位置: 编程技术 - 正文

android 开源框架Universal-Image-Loader解析(安卓开发框架mvvm)

编辑:rootadmin

推荐整理分享android 开源框架Universal-Image-Loader解析(安卓开发框架mvvm),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:安卓开源ui框架,android常用开源框架,安卓 开源框架,安卓 开源框架,android开发框架,安卓开发框架mvvm,android开发框架,android开发框架mvp,内容如对您有帮助,希望把文章链接给更多的朋友!

最近要在公司分享东西,很多项目中用到Universal-Image-Loader这个开源框架,没有太多的进程调度,没有各种内存读取控制机制、没有各种异常处理,一起学习一下

1.UIL原理

a.UI:请求数据,使用唯一的Key&#;索引Memory Cache中的Bitmap。

b.内存缓存:缓存搜索,如果能找到Key&#;对应的Bitmap,则返回数据。否则执行c。

c.硬盘存储:使用唯一Key&#;对应的文件名,检索SDCard上的文件。如果有对应文件,使用BitmapFactory.decode*方法,解码Bitmap并返回数据,同时将数据写入缓存。如果没有对应文件,执行d。

d.下载图片:启动异步线程,从数据源下载数据(Web)。

e.若下载成功,将数据同时写入硬盘和缓存,并将Bitmap显示在UI中。

2.UIL特征

多线程下载图片

随意配置ImageLoader

支持二级缓存

支持加载文件系统,assets,drawable等图片

支持图片下载过程的监听

。。。

特征很多,这里就不一一列举了

3.UIL解析

ImageLoaderConfiguration是针对图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。

ImageLoader是具体下载图片,缓存图片,显示图片的具体执行类,它有两个具体的方法displayImage(...)、loadImage(...),但是其实最终他们的实现都是displayImage(...)

DisplayImageOptions用于指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理。

4.ImageLoaderConfiguration配置

使用createDefault()方法创建了一个默认的ImageLoaderConfifuration

1.开启内存缓存,压缩的图片大小为屏幕的宽和高

2.开启硬盘缓存,不压缩图片

3.默认的线程池为3

4.允许缓存不同尺寸的图片

5.默认使用FIFO处理任务

以上对应默认配置,如果默认配置不满足你的要求,可以自行修改

5.DisplayImageOptions配置(根据需求自行修改)

android 开源框架Universal-Image-Loader解析(安卓开发框架mvvm)

1.根据网络情况设置图片状态(空白,下载错误,正在下载)

2.图片加载完成后是否重置view

3.设置下载延迟时间

4.是否缓存到内存或者硬盘

5.下载完成后对图片的处理

6.ImageLoader

ImageLoader有两个具体的方法,loadImage()和displayImage(),在项目中一般直接使用displayImage()方法,比较方便

7.加载其他来源的图片

加载其他来源的图片时,只需要把url改掉

加载content provider图片String contentprividerUrl = “ assetsUrl = Scheme.ASSETS.wrap("image.png");

加载drawable图片String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image")

8.UIL内存缓存策略

1. 只使用的是强引用缓存

LruMemoryCache(这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用,下面我会从源码上面分析这个类)

2.使用强引用和弱引用相结合的缓存有

UsingFreqLimitedMemoryCache(如果缓存的图片总量超过限定&#;,先删除使用频率最小的bitmap)

LRULimitedMemoryCache(这个也是使用的lru算法,和LruMemoryCache不同的是,他缓存的是bitmap的弱引用)

FIFOLimitedMemoryCache(先进先出的缓存策略,当超过设定&#;,先删除最先加入缓存的bitmap)

LargestLimitedMemoryCache(当超过缓存限定&#;,先删除最大的bitmap对象)

LimitedAgeMemoryCache(当 bitmap加入缓存中的时间超过我们设定的&#;,将其删除)

3.只使用弱引用缓存

WeakMemoryCache(这个类缓存bitmap的总大小没有限制,唯一不足的地方就是不稳定,缓存的图片容易被回收掉)

9.UIL硬盘缓存策略

FileCountLimitedDiscCache(可以设定缓存图片的个数,当超过设定&#;,删除掉最先加入到硬盘的文件)LimitedAgeDiscCache(设定文件存活的最长时间,当超过这个&#;,就删除该文件)

TotalSizeLimitedDiscCache(设定缓存bitmap的最大&#;,当超过这个&#;,删除最先加入到硬盘的文件)

UnlimitedDiscCache(这个缓存类没有任何的限制)

注:UIL默认内存缓存使用的LruMemoryCache,默认硬盘缓存使用的是UnlimitedDiscCache

.UIL如何避免OOM

1.减少线程池的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,默认为3

2.在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_,因为默认是ARGB_, 使用RGB_会比使用ARGB_少消耗2倍的内存

3.在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存

4.在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android Chronometer(定时器) 毁灭博客园首页新闻新随笔联系管理订阅随笔-文章-0评论-Android控件之Chronometer(定时器)Chronometer是一个简单的定时器,你可以给它一个开始时间

在android中做一个竖着的seekbar效果 工作繁忙,总想有机会停下来喘口气,整理一下思路,做一些积累,但是这样的机会很少。要做android的界面,基础的要求是熟悉那些内置的组件(prebuil

使得音乐播放静音及恢复音乐 一.使得音乐播放静音privatevoidsilence(){AudioManageraudioManager=(AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE);audioManager.setStreamMute(AudioManager.STREAM_MUSIC,true);

标签: 安卓开发框架mvvm

本文链接地址:https://www.jiuchutong.com/biancheng/371050.html 转载请保留说明!

上一篇:Android中摇一摇效果的实现(手机摇一摇插件)

下一篇:Android Chronometer(定时器)

  • 消费税应该怎么缴纳
  • 收到上年度所得税发票
  • 公司卫生纸是自己带还是公司买
  • 借款给别的公司收到的利息会计分录怎么写
  • 个人转让著作权交什么税
  • 接受投资款尚未工商变工账务怎么做处理?
  • 计提的利息汇算清缴前没发放,需要交企业所得税吗
  • 外出施工安装的公司发工资怎么记账?
  • 小规模发票什么样子
  • 应交增值税下面有几个科目
  • 发票普票冲红
  • 以下凭证免征印花税的有
  • 主营业务成本没有结转怎么办
  • 手撕发票怎么报销给单位,怎么打印抬头和日期
  • 小规模给个人开普票怎么填写
  • 房租付款和发票有关系吗
  • 在Linux系统中安装了一块虚拟磁盘大小的2G
  • 应交税费在借方是进项还是销项
  • 筹建期固定资产是否要折旧
  • 什么情况下出租人可以解除合同
  • 新准则待摊费用
  • php laravel教程
  • 基金管理人业绩报酬分配模式
  • 交暖气费可以开单位发票吗
  • 车辆购买保险发票未回怎么做会计分录
  • 企业合并分立
  • 银行贷款每个月都要还吗?
  • 资产减值损失会影响利润总额吗
  • 大西洋,一望无际的海面
  • php登录注册整套源码
  • nodejs基础知识
  • 实际发放股票股利
  • 应纳所得税额等于利润总额减去差异
  • 代缴社保零申报对个人有影响吗
  • 差旅费必须填写差旅费报销单吗
  • 怎么查看python
  • dedecms安装步骤
  • 支付宝提取到公积金账户
  • 进项税计税依据
  • 个人所得税表格怎么做
  • PostgreSQL教程(八):索引详解
  • 生成100个[30-99]之内的随机数
  • 已经经营中的企业有哪些
  • 购买其他权益工具投资时发生的交易费用
  • 企业所得税汇算表
  • 预收账款转主营业务收入怎么描述
  • 收到现金货款怎么处理
  • 带息票据贴现账务处理
  • 调整以前年度销项税额的分录
  • 公司转投资是什么意思
  • 汇算清缴晚了几天
  • 收到红字发票如何入账
  • 限售股上市流通是好还是坏
  • 免征印花税的6个项目
  • 员工报销没有发票可以从公户转账吗
  • 审核通过的红字信息表可以删除吗
  • 不同利益主体之间的利益如何协调
  • 去年未开票收入未申报
  • 约当产量法下的加权平均法怎么算
  • 使用sql查询
  • 隐藏在大山深处的罪恶
  • Win7旗舰版系统镜像文件
  • solaris8+apache2+weblogic813+db2_82客户端+128 安装过程
  • 卸载声卡驱动有什么影响
  • win10系统怎么查询ip
  • find按照文件大小查找
  • python 读中文文件
  • 深入react技术栈
  • ExtJS扩展 垂直tabLayout实现代码
  • surf apk android
  • 有关表格边框的快捷键
  • jquery的加载事件
  • python闭包的条件
  • 详解各种汽油一吨等于多少升
  • javascript中checkbox使用方法实例演示
  • jquery-easyui-1.3.3
  • 国家税务2018年61号附件
  • 河南省地税网上营业厅
  • 纳税服务基本情况总结
  • 云南省昆明市税收优惠政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设