搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
笔触狂放9
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
轻松与朋友组队!幻兽帕鲁Palworld联机服务器搭建
2
YoloV8的安装和训练_yelov5和v8能同时安装吗
3
CSS基础知识总结
4
Hive调优及原理分析_hive调优小表join大表的原理
5
微服务:通信协议:Restful,RPC(Dubbo、Motan、gRPC)_rpc amqp或者http service
6
每天一个知识点 - 常用设计模式
7
新版vscode remote ssh不兼容老系统 (waiting for server log)
8
oracle 设置权限 禁止删除用户
9
第十二章 Linux——日志管理
10
C语言——O/动态内存管理
当前位置:
article
> 正文
常用图片加载框架比较(Glide、volley、Picasso)_imagerequest glide
作者:笔触狂放9 | 2024-02-18 07:08:29
赞
踩
imagerequest glide
Volley
一、ImageRequest:
来对网络图片进行请求,放入请求队列,获取后现在在控件上面
步骤:
创建请求队列mQueue;
创建ImageRequest 请求,并进行配置,并将请求放入请求队列mqueue中去;
ImageRequest只有一个构造方法:对图片大小和图片格式进行设置;
原理:
拿到要请求的URL,去缓存中遍历,是否已存在要请求的资源;mCache.getBitmap()
是
从缓存中取出请求
得到缓存中取出需要的请求结果
是
解析结果
返回结果到主线程(mDelivery.postResponse())
否
结果为null或者缓存过期
添加到网络请求队列
否
进行网络请求(MakeImageRequest)
从网络请求队列中取出具体的请求
进行请求
解析网络请求
是否缓存
是:
添加到缓存
否:
返回结果到主线程(mDelivery.postResponse())
二、ImageLoader
ImageLoader也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的,
ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。
步骤:
1,创建请求队列;
2,创建imageloader对象,其中imageloader的构造方法第二个参数为imageCache的实现类,实现图片缓存的算法类。
3,创建imagelistener对象,主要设置图片加载失败和加载过程中的图片设置。
三、NetworkImageView
是一个自定义控件,它是继承自ImageView的,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能。
步骤:
1. 创建一个RequestQueue对象。
2. 创建一个ImageLoader对象。
3. 在布局文件中添加一个NetworkImageView控件。
4. 在代码中获取该控件的实例。
5. 设置要加载的图片地址。
由于NetworkImageView是一个控件,在加载图片的时候它会自动获取自身的宽高,然后对比网络图片的宽度,再决定是否需要对图片进行压缩。
它的压缩过程是在内部完全自动化的
,它会始终呈现给我们一张大小刚刚好的网络图片,不会多占用任何一点内存。
如果你不想对图片进行压缩,只需要在布局文件中把NetworkImageView的layout_width和layout_height都设置成wrap_content就可以了,这
样NetworkImageView就会将该图片的原始大小展示出来,不会进行任何压缩。
Picasso
定义:
Picasso是Square公司开源的一个Android图形缓存库,可以实现图片下载和缓存功能.
采用链式调用的方式。
原理:
接收到加载和显示图片的任务
创建Request,并交给dispatcher进行处理(BitmapHunter)
Dispatcher分发任务到具体的RequestHandler
ResourceRequesthandler
FileRequestHandler
NetWorkRequestHandler
任务通过MemoryCache及Handler(数据获取接口) 来获取图片
图片获取成功后通过PicassoDrawable显示到Target(ImageView)中。
优点:
不仅实现了图片异步加载的功能,还解决了android中加载图片时需要解决的一些常见问题:
1.解决了在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位的这个问题;
2.使用最少的内存完成复杂的图片转换,比如把下载的图片转换为圆角等;
3.自带内存和硬盘二级缓存功能;
4.从不同资源进行加载(网络、本地、assests、资源)
5.支持优先级处理
缺点:
功能较简单---图片加载
性能(加载速度)比别的库慢(Glide、Fresco)
自身实现本地无缓存
Glide
介绍:
Glide 是一个高效、开源、Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。默认使用httpurlconnection作为网络请求模块;
Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。
创建Glide的主要目的:
一个是实现平滑的图片列表滚动效果;
一个是支持远程图片的获取、大小调整和展示。如背景图片的加载、内存和磁盘间的高效缓存、使用位图和资源池提高加载性能。
特点:
GIF动画的解码:
通过调用Glide.with(context).load(“图片路径“)方法,GIF动画图片可以自动显示为动画效果。如果想有更多的控制,还可以使用Glide.with(context).load(“图片路径“).asBitmap()方法加载静态图片,使用Glide.with(context).load(“图片路径“).asGif()方法加载动画图片;
本地视频剧照的解码:
通过调用Glide.with(context).load(“图片路径“)方法,Glide能够支持Android设备中的所有视频剧照的加载和展示
缩略图的支持:
为了减少在同一个view组件里同时加载多张图片的时间,可以调用Glide.with(context).load(“图片路径“).thumbnail(“缩略比例“).into(“view组件“)方法
加载一个缩略图,还可以控制thumbnail()中的参数的大小,以控制显示不同比例大小的缩略图。
Activity生命周期的集成:
当Activity暂停和重启时,Glide能够做到智能的暂停和重新开始请求,并且当Android设备的连接状态变化时,所有失败的请求能够自动重新请求。
原因:
glide需要知道activity的生命周期,
在Glide.with( ) 方法中,
向当前的Activity当中添加一个隐藏的Fragment。通过fragment来监听activity生命周期的变化。
因为Fragment的生命周期和Activity是同步的,如果Activity被销毁了,Fragment是可以监听到的,这样Glide就可以捕获这个事件并停止图片加载了。
转码的支持:
Glide的toBytes() 和transcode() 两个方法可以用来获取、解码和变换背景图片,并且transcode() 方法还能够改变图片的样式
动画的支持:
新增支持图片的淡入淡出动画效果(调用crossFade()方法)和查看动画的属性的功能。
OkHttp和Volley的支持:
默认选择HttpUrlConnection作为网络协议栈,还可以选择OkHttp和Volley作为网络协议栈
其他功能:
如在图片加载过程中,使用Drawables对象作为占位符、图片请求的优化、图片的宽度和高度可重新设定、缩略图和原图的缓存等功能
设计流程:
Glide收到加载及显示资源的任务
创建Request并将它交给RequestManager(任务管理器)
singleRequest
ThumbnailRequestCoordinatior
Request启动Engine(数据获取引擎)去数据源获取资源
通过Fetcher获取数据
LocalURIFetcher
OkhttpStreamFetcher
通过缓存获取数据
MemoryCache
获取到后Transformation(图片处理)处理后,回调交给Target(目标)进行图片显示
缓存策略:(
内存–>磁盘–>网络
)
内存缓存
Glide默认是会在内存中缓存处理图(RESULT)的。(isCacheable = true)
内存缓存最大空间(maxSize)=每个进程可用的最大内存 * 0.4
磁盘缓存
Glide磁盘缓存策略分为四种,默认的是RESULT。
磁盘缓存大小: 250 * 1024 * 1024(250MB)
1.ALL
:缓存原图(SOURCE)和处理图(RESULT)
2.NONE
:什么都不缓存
3.SOURCE
:只缓存原图(SOURCE)
4.RESULT
:只缓存处理图(RESULT)
—默认值
清除缓存:
清除所有内存缓存(需要在Ui线程操作)
Glide.get(this).clearMemory();
清除所有磁盘缓存(需要在子线程操作)
Glide.get(MainActivity.this).clearDiskCache();
总结比较:
Glide和Picasso都是非常完美的库。
Picasso:
和Square的网络库一起能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现。
Glide:
模仿了Picasso的API,而且在他的基础上加了很多的扩展(比如gif等支持),Glide默认的Bitmap格式是RGB_565,
比Picasso默认的ARGB_8888格式的内存开销要小一半;
Picasso缓存的是全尺寸的(只缓存一种),而Glide缓存的是跟ImageView尺寸相同的(即56*56和128*128是两个缓存) 。
比较:
Glide加载图像以及磁盘缓存的方式都要优于Picasso,速度更快,并且Glide更有利于减少OutOfMemoryError的发生,GIF动画是Glide的杀手锏。
不过Picasso的图片质量更高。我的建议是使用Glide,但是将Bitmap格式换成ARGB_8888、让Glide缓存同时缓存全尺寸和改变尺寸两种。
Picasso所能实现的功能,Glide都能做,无非是所需的设置不同。
但是Picasso体积比起Glide小太多如果项目中网络请求本身用的就是okhttp或者retrofit(本质还是okhttp),那么建议用Picasso,
体积会小很多(Square全家桶的干活)。
Glide的好处是大型的图片流,比如gif、Video,如果你们是做美拍、爱拍这种视频类应用,建议使用。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/笔触狂放9/article/detail/105963
推荐阅读
article
Universal-
Image
-
Loader
,
android
-Volley,
Picasso
、Fres...
图像1
universal
-
image
-
loader
主页: https://github.com/nostra13/An...
赞
踩
article
volley
okhttp
universal
-
image
-
loader
对比分析_
volley
和u...
一、Volley下载地址: https://github.com/smanikandan14/Volley-demo特点...
赞
踩
article
Android
图片
框架对比Universal-
Image
-
Loader
,
android
-
Volley
...
在
android
中的加载网络
图片
是一件十分令人头疼的事情,在网上有着许多关于加载网络
图片
的开源库,可以让我们十分方便的加...
赞
踩
article
图片加载
框架
Glide
,
Picasso
fresco volley imageloader Univ...
glide
(底层):HttpUrlConnection
Glide
的
网络
请求部分可以使用当前最流行
的
网络
请求
框架
Volle...
赞
踩
article
网络图片加载(
Universal
_
Image
_
Loader
,
Volley
)_baseimagedow...
当我们的
Image
View是加载网络的图片是_
baseimagedownloader
volley
baseimagedo...
赞
踩
article
Android图片加载框架:
ImageLoader
,Volley,
Picasso
,Glide,Fre...
1.
ImageLoader
2.Volley3.picasso4.
glide
5.fresco首先:以前自己一直是使用Ima...
赞
踩
article
Universal-
Image
-
Loader
,
android
-Volley,
Picasso
、Fres...
目录(?)[-]4
Fresco
关于
Fresco
特性内存管理图片的渐进式呈现Gif图和WebP格式图像的呈现图像的加载P...
赞
踩
article
Android
图片框架对比
Universal
-
Image
-
Loader
,
Volley
,
Picasso
...
在android中的加载网络图片是一件十分令人头疼的事情,在网上有着许多关于加载网络图片的开源库,可以让我们十分方便的加...
赞
踩
article
Picasso
,
ImageLoader
,
Fresco
,
Glide
优劣_
glide
picas...
Picasso
,
ImageLoader
,
Fresco
,
Glide
优劣首先看
Fresco
, 它的优点是其他几个框...
赞
踩
article
universal
ImageLoader,
picasso
,
glide
,
fresco
图片
选择库选择分析...
在
图片
加载这块,
picasso
,
glide
,
universal
ImageLoader,
fresco
这几个库算是目前做好...
赞
踩
article
Android的开发之&论
图片
加载
Glide
、
Fresco
、
Picasso
、
ImageLoader
特...
Glide
图片
加载
框架一、简介:
Glide
是一款谷歌官方推荐使用的强大
图片
加载
框架,作者是bumptech,这个库被广泛...
赞
踩
article
android
-
volley
图片
缓存
分析与比较
Volley
, Universal-
Image
-L...
关于
android
图片
缓存
开源框架,被程序猿们津津乐道的应该是,
Volley
, Universal-
Image
-Loa...
赞
踩
article
Android
Volley
完全解析(一),初识
Volley
的基本用法_
com
pile '
com
.a...
Volley
简介我们平时在开发
Android
应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP...
赞
踩
article
Android
三大
图片
加载
框架的对比——
ImageLoader
,
Picasso
,
Glide
...
一、ImageLaoder介绍 <
ImageLoader 是很早开源的
图片
缓存,在早期被很多应用使...
赞
踩
article
Android
Universal-
Image
-
Loader
,
Volley
,
Picasso
、Fres...
转载地址:http://blog.csdn.net/richiezhu/article/details/46968569...
赞
踩
相关标签
android
图片
开源
网络
框架
imageview
volley
Android图片
Picasso
Fresco
Glide
Fresco和Glide
imageLoder
picasso
glide
fresco