在这篇文章中,我们将学习 Android Image Loading 库如何解决图像加载缓慢的问题。
快速加载图像对于更好的用户体验非常重要。我们必须了解它是如何在幕后完成的。
当涉及到 Android 面试时,这些概念很重要。
因此,我正在阅读 Android 中各种图像加载库的源代码,例如Glide、Fresco等。
这些库在内部为我们做了很多事情,这样我们就可以使用它们并轻松完成我们的任务。他们让我们的生活更轻松。
他们做的一件事是尽可能快地加载图像。
让我们了解一下 Android Image Loading 库如何快速加载图像。
将位图加载到视图中时,加载缓慢是另一个问题。加载缓慢的主要原因之一是,即使视图不在窗口或不再需要该任务,我们也不会取消下载或解码位图之类的任务,因此甚至有许多任务正在完成虽然我们不需要它们,所以加载刚刚出现在窗口中的实际图像需要时间。
图像加载库喜欢Glide并Fresco照顾这一点,它们会正确取消所有任务并仅加载用户可见的图像。
这些库知道活动和片段生命周期,这样他们就知道需要取消哪些图像下载或位图解码任务。
您必须考虑他们如何了解活动和片段生命周期。我会以Glide.
我们Glide这样使用:
Glide.with(fragment)
.load(url)
.into(imageView);
在这里,我们可以看到我们正在传递 Fragment,这样Glide订阅了 Fragment 的生命周期事件。同样,它发生在活动和视图上。
这就是他们通过在适当的时间取消不再需要的任务来解决图像加载缓慢问题的方法。这些库所做的另一件事是它们将图像缓存在两个级别。让我们也了解一下。
他们创建了一个内存缓存,这样他们就不必一次又一次地解码图像,因为解码需要时间。这些库创建一些可配置大小的缓存来捕获位图。
它们维护两个级别的缓存:
- 内存缓存
- 磁盘缓存
当我们向库提供 URL 时,它们会执行以下操作: - 他们检查具有该 URL 键的图像是否在内存缓存中可用。
- 如果存在于内存缓存中,它们只是通过从内存缓存中获取位图来显示位图。
- 如果内存缓存中不存在,它们会检查磁盘缓存。
- 如果存在于磁盘缓存中,它们从磁盘加载位图,也将其放入内存缓存中,并将位图加载到视图中。
- 如果磁盘缓存中不存在,他们从网络下载图像,将其放入磁盘缓存,也将其放入内存缓存,然后将位图加载到视图中。
-通过这种方式,它们可以加快加载速度,因为直接从内存缓存中显示总是更快。
因此,他们主要做以下两件事:
- 在适当的时候取消不再需要的任务。
- 在两个级别缓存图像。
这就是关于 Android Image Loading 库如何解决图像加载缓慢问题的全部内容。
我们将在即将发布的博文中了解这些库所做的更多事情。
现在就是这样。
谢谢