Glide性能 Glide 充分考虑了Android图片加载性能的两个关键方面: 图片解码速度 解码图片带来的资源压力 为了让用户拥有良好的App使用体验,图片不仅要快速加载,而且还不能因为过多的主线程...;如果无法解码任何资源,则返回null。...context :本次加载图片的上下文环境; myUrl :本次需要加载图片的地址,也叫数据; imageView :本次需要加载图片的View ,也叫目标; RequestManager Glide.with...interface DataCallback { //如果加载成功,则使用加载的数据进行调用;如果加载失败,则使用null进行调用。...; Glide 和 ImageLoader 都支持在图片加载前获取图片的数据(图片的宽、高)。
比较 Picasso 与 Glide 1.两者使用方式类似,但Glide的with()接受的不仅仅是Context,还可以是Activity或是Fragment,Context会自动的从他们获取。...Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟。...4.Glide可以加载GIF动态图,而Picasso不能。 5.Picasso (v2.5.1)大小约为118KB,然而Glide (v3.5.2)的大小约为430KB。...1.网络加载图片到ImageView中 Glide.with(context).load(imageUrl).into(imageView); 2.当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片...); 3.当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示: Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher
,对于图片有一些具体的要求的话,建议使用这个库,但是这个库当你需要对图片作一些具体的操作比如加载圆角矩形图片、裁剪图片为圆形时,需要你自己写一些操作,如果基础不够好的会感觉很困难。...还有就是这个库我们只能看到结果,无法关心图片的下载过程。 其他:Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。...原因在于Picasso是加载了全尺寸的图片到内存,然后让GPU来实时重绘大小。而Glide加载的大小和ImageView的大小是一致的,因此更小。...); 下次在任何ImageView中加载图片的时候,全尺寸的图片将从缓存中取出,重新调整大小,然后缓存。...Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟。不过各有所长。
这也是Glide图片加载框架这么受欢迎的原因。当然本文如果只是简单的加载一个图片出来那就完全没有必要了,自然要搞点花里胡哨的事情才行。...同时,别忘了添加网络访问权限,否则你是无法加载网络url图片的。...三、添加设置资源监听 但如果你的图片很大,网络又不是很好的情况下,就会让用户有一种不好的体验,比如,当你在地铁站里浏览资讯时,此时网络环境很差,你加载图片没有反应,而用户也无法感知,此时就会认为你的软件有问题...你会发现关闭网络之后图片确实没有加载出来,但是日志也没有看到有失败的字样。...这个图标可以从我的源码里面去拿,或者自己从网络上下载。 <!
翻译成能听懂的 Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。...风骚的缓存策略 支持按控件大小缓存对应大小的图片,且默认的图片格式为RGB_565,相对占用空间更小。速度也因此更快。 嗯~~~ 就看这几个,你说你要不要选Glide..... 3....************* 指定加载图片的大小(override) ********************************** RequestOptions requestOptions =...简单来说,图片加载需要以下几种模块。 参数封装 加载请求 执行引擎 数据加载器 解码器 编码器 缓存 那实际Glide是这样设计的么?...if (model == null) { //如果为null则直接失败。
今天的学习模式仍然是以基本用法和源码分析相结合的方式来进行的,当然,本文中的源码还是建在第二篇源码分析的基础之上,还没有看过这篇文章的朋友,建议先去阅读 Android图片加载框架最全解析(二),从源码的角度理解...因为preload()方法默认是预加载的原始图片大小,而into()方法则默认会根据ImageView控件的大小来动态决定加载图片的大小。...在第二篇Glide源码解析的时候,我带着大家一起分析过,Glide在开始加载图片之前会先计算图片的大小,然后回调到onSizeReady()方法当中,之后才会开始执行图片加载。...还有如果Glide加载图片失败了,我该怎样调试错误的原因呢?答案都在listener()方法当中。...从方法名上就可以看出来了,当图片加载完成的时候就会回调onResourceReady()方法,而当图片加载失败的时候就会回调onException()方法,onException()方法中会将失败的Exception
Activity 和 Fragment,Context会自动的从他们获取。...1.网络加载图片到ImageView中 Glide.with(context).load(imageUrl).into(imageView); 2.当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片...); 3.当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示: Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher...).into(imageView); 4.图片的缩放,centerCrop()和fitCenter(): (1)使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView...一个可以在Glide加载时很方便使用Palette的库。
Glide缓存机制简介 1.1 缓存的图片资源 Glide 需要缓存的 图片资源 分为两类: 原始图片(Source) :即图片源的图片初始大小 & 分辨率 转换后的图片(Result) :经过 尺寸缩放...和 大小压缩等处理后的图片 当使用 Glide加载图片时,Glide默认 根据 View视图对图片进行压缩 & 转换,而不显示原始图(这也是Glide加载速度高于Picasso的原因) 1.2...如,在 RecyclerView 上下滑动,而RecyclerView中只要是Glide加载过的图片,都可以直接从内存中读取 & 展示,从而不需要重复从 网络或硬盘上读取,提高图片加载效率。...---- 步骤4:开启 加载图片 线程 若无法从 内存缓存 里 获得缓存的图片,Glide就会开启 加载图片的线程 但在该线程开启后,Glide并不会马上去网络 加载图片,而是采取采用Glide的第2级缓存...return decodeFromSource(); } } ---- 步骤5:从 磁盘缓存 中获取缓存图片 若无法从 内存缓存 里 获得缓存的图片,Glide就会采用第2级缓存:磁盘缓存 去获取缓存图片
Glide加载动态图片 首先我们先要去依赖一个githup:bumptech:glide:glide:3.7.0包; 使用Glide结合列表的样式进行图片加载: 1) 如果使用的是ListView,...drawable)方法设置加载失败后的图片显示: Glide .with(context) .load("http://futurestud.io/non_existing_image.png")...显示gif动画: Glide .with( context ) .load( gifUrl ) .asGif() //判断加载的url资源是否为gif格式的资源 .error( R.drawable.full_cake...,但这些都不能解决上面的问题 怎样能 Glide动态加载不同大小的图片切圆形图片跟圆角图片呢?...解决很简单 既然是图片大小不一致而导致图片切出来不一样,那就把图片变的一样大小不就可以吗 申明一下我的代码也是在Glide动态加载圆形图片跟圆角图片搜出来的代码基础上修改的.
这个功能对于我们在做APK体积压缩,内存管理的时候还是很有用的,比如当我们要从后台返回的连接中加载一张图片,这张图片的大小我们是不知道的,虽然现在大家都使用Glide等三方 图片加载框架,框架会自动对图片进行压缩...不论是本地加载图片还是网络加载图片都能够进行监控。 3.实现思路 要实现对图片文件大小和所占内存的监控,那么我们就得先知道图片的文件大小和加载该图片所耗费的内存。...Glide Picasso Fresco Image Loader 以从网络加载一张图片举例,当使用图片框架加载一张网络图片时,会使用OkHttp或者是HttpUrlconnection去下载该图片,这时候我们就能得到图片文件的大小...以Glide为例,Glide会将图片下载存到本地,然后再把本地图片读入内存构建一个Resource,当图片加载成功的时候,就会回调我们自定义的监听器,但是这个时候我们只能获取到图片加载到内存后的数据,也就是说我们获取不到图片的文件大小...其次我们还遇到了这样一个问题,当我使用Glide框架加载一张网络图片时,我们假设这张图片文件大小超标,但是内存不超标,那么我们会记录该图片的所有信息。
和Fresco可以看出Fresco的java heap基本保持较低平稳状态,而Glide的java heap基本为Fresco的一倍,所以OOM的风险也比fresco大一倍。...从时间上glide是有一定差距,不过fresco有两张图片没加载完成,所以时间不是完全可靠的数据 从native heap可以看出Fresco最高545MB,这个有点恐怖,下面我们看个知识点。...缓存图像大小 Glide则会根据ImageView控件尺寸获得对应的大小的bitmap来展示,从而缓存也可以针对不同的对象:原始图像(source),结果图像(result) 缓存原始图像 加载策略 Glide...而且Glide直接缓存相对大小的图片,节省空间的同时下场如果是同样大小的图片就不要再次请求,直接可以使用。 依赖 Glide ?...相对而言Glide会轻好多,上手快,使用简单,配置方便,而且从加载速度和性能方面不相上下。对于一般的APP来说Glide是一个不错的选择,如果是专业的图片APP那么Fresco还是必要的。
如果你想将Glide的源码通读一遍的话,可以去看本系列的第二篇文章 Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程 。...也就是说,如果你的应用缓存的图片总大小超出了250M,那么Glide就会按照DiskLruCache算法的原则来清理缓存的图片。...Glide加载图片的默认格式是RGB_565,而Picasso加载图片的默认格式是ARGB_8888。ARGB_8888格式的图片效果会更加细腻,但是内存开销会比较大。...,register()方法中传入的参数表示Glide支持使用哪种参数类型来加载图片,以及如何去处理这种类型的图片加载。...下篇文章中,我们将会利用本篇文章中学到的知识,对Glide进行一个高级的功能扩展,感兴趣的朋友请继续阅读 Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能 。
在这里插入图片描述 由于调用了asBitmap()方法,现在GIF图就无法正常播放了,而是会在界面上显示第一帧的图片。 那么类似地,既然我们能强制指定加载静态图片,就也能强制指定加载动态图片。...在这里插入图片描述 没错,如果指定了只能加载动态图片,而传入的图片却是一张静图的话,那么结果自然就只有加载失败喽。 指定图片大小 实际上,使用Glide在绝大多数情况下我们都是不需要指定图片大小的。...Glide会自动判断ImageView的大小,然后只将这么大的图片像素加载到内存当中,帮助我们节省内存开支。...也正是因为Glide是如此的智能,所以刚才在开始的时候我就说了,在绝大多数情况下我们都是不需要指定图片大小的,因为Glide会自动根据ImageView的大小来决定图片的大小。...感兴趣的朋友请继续阅读 Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程 。
.into(imageView); 2.2 设置加载中和加载失败的情况 Glide.with(context) .load(url) .placeholder(R.drawable.loading...) //占位符 也就是加载中的图片,可放个gif .error(R.drawable.failed) //失败图片 .into(view); 2.3 加载动画和静态图 Glide.with...2.7 图片缓存机制 Glide缓存策略 Glide默认开启磁盘缓存和内存缓存,当然也可以对单张图片进行设置特定的缓存策略。...,默认 Glide自动缓存当前图片的尺寸,如果其他地方取这个比例的图片则取的是缓存。...不缓存等比例的图片!如果其他地方想要取当前图片的缓存,可加载时设置当前图片的宽高,用这个方法:override(300,400),值在dimens里取,直接设置会损失清晰度。
现在Android上的图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后来的新兴军Glide和Picasso,当然还有Facebook...由于调用了asBitmap()方法,现在GIF图就无法正常播放了,而是会在界面上显示第一帧的图片。 那么类似地,既然我们能强制指定加载静态图片,就也能强制指定加载动态图片。...没错,如果指定了只能加载动态图片,而传入的图片却是一张静图的话,那么结果自然就只有加载失败喽。 指定图片大小 实际上,使用Glide在绝大多数情况下我们都是不需要指定图片大小的。...也正是因为Glide是如此的智能,所以刚才在开始的时候我就说了,在绝大多数情况下我们都是不需要指定图片大小的,因为Glide会自动根据ImageView的大小来决定图片的大小。...感兴趣的朋友请继续阅读 Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程 。
具体做法是,使用glide加载图片,然后设置listener监听,在图片请求成功onResourceReady后,将图片资源resource保存到集合中。...,也就是ImageView的尺寸大小图片。...为什么会遇到这种问题 如果你传递一个ImageView作为.into()的参数,Glide会使用ImageView的大小来限制图片的大小。...例如如果要加载的图片是1000×1000像素,但是ImageView的尺寸只有250×250像素,Glide会降低图片到小尺寸,以节省处理时间和内存。...在设置into控件后,也就是说,在onResourceReady方法中返回的图片资源resource,实质上不是你加载的原图片,而是ImageView设定尺寸大小的图片。
最近在组建项目组从0开始开发项目,从立项到上线,有一些心得,包括项目规范、结构、优化、三方等,与大家分享,一起修仙! 接下来我会以自己写的两个项目为例,结合起来分析。...Glide的这种方式优点是加载显示非常快。 默认使用HttpUrlConnection下载图片,可以配置为OkHttp或者Volley下载,也可以自定义下载方式。...默认使用手机内置存储进行磁盘缓存,可以配置为外部存储,可以配置缓存大小,图片池大小。 默认使用两个线程池来分别执行读取缓存和下载任务,都可以自定义。...缺点: Glide加载的图片质量要差于Picasso,这是因为Glide默认的Bitmap格式是RGB_565,比ARGB_8888格式的内存开销要小一半。...支持加载Git动态图和Webp格式的图片。 缺点: 框架体积比较大,3M左右,会增加APK的大小。
设置占位符和错误图片 你可以利用placeholder()方法设置加载过程中显示的占位符图片,以及使用error()方法设置加载失败时显示的图片: Glide.with(context) .load...) 图片变换 你可以使用transform()方法为图片添加变换效果。...(imageView) 图片压缩 Glide通过根据目标ImageView的大小和ScaleType来计算图片的实际大小,并进行压缩。...它根据图片的URL或资源ID生成唯一的缓存键,以确保不同的图片不会混淆。此外,Glide支持自定义缓存的大小和有效期 ,以适应不同需求。 Glide的缓存机制是其优秀性能的关键之一。...当活动资源缓存已满时,Glide会将不再活跃的图片从活动缓存中移至未活动资源缓存,以腾出空间供新图片使用。 缓存策略 Glide允许开发者根据需求设置不同的缓存策略。
还有就是网络加载图片,有时候会加载很慢,影响了用户体验。 另外从开发角度来说,Bitmap 的创建非常消耗时间和内存,可能导致频繁GC。...具体的缓存策略可以是这样的:内存作为一级缓存,本地作为二级缓存,网络加载为最后。...他会按照最近最少使用的算法将内存控制在一定大小内,超出的时候自动回收。...关于Glide的缓存 事实上,现在已经很少自己封装一个三级缓存策略,在众多的图片框架中都加入缓存策略,实现起来更简单。这里以 Glide 为例。 Glide 的使用基本就是一行代码就解决了。...Glide 的内存缓存 Glide 是默认开启了内存缓存的,只要你通过 Glide 加载一张图片,他就会缓存到内存中,只要他还没被从内存中清理之前,下次使用 Glide 都会从内存缓存中加载。
实际上,使用Glide在大多数情况下我们都是不需要指定图片大小的,因为Glide会自动根据ImageView的大小来决定图片的大小,以此保证图片不会占用过多的内存从而引发OOM。...也就是说,Glide现在只会将图片加载成200*100像素的尺寸,而不会管你的ImageView的大小是多少了。...也就是说,当我们使用Glide加载了一张图片之后,这张图片就会被缓存到内存当中,只要在它还没从内存中被清除之前,下次使用Glide再加载这张图片都会直接从内存当中读取,而不用重新从网络或硬盘上读取了,这样无疑就可以大幅度提升图片的加载效率...举个例子,比如说我们刚才使用了preload()方法来对图片进行预加载,但是我怎样确定预加载有没有完成呢?还有如果Glide加载图片失败了,我该怎样调试错误的原因呢?...从方法名上就可以看出来了,当图片加载完成的时候就会回调onResourceReady()方法,而当图片加载失败的时候就会回调onLoadFailed()方法,onLoadFailed()方法中会将失败的
领取专属 10元无门槛券
手把手带您无忧上云