背景
项目中有这样一个需求:在APP中展示一个操作指引,这是三张服务端下发的图片。
为了提高用户体验,想要先下载图片,然后下载完成之后,再对图片进行展示,这样用户就不必看到加载图片时的空白状态。
实现方案
这里我打算新写一个工具类,专门用来处理类似的请求。同时呢直接使用Glide的preload的方法,监听资源准备好之后,再去执行展示方法。具体代码如下:
public class ImagePreloadUtil {
fun preloadImage(imageUrls: List<String?>?, onLoadFinish: () -> Unit) {
if (imageUrls.isNullOrEmpty()) {
onLoadFinish()
return
}
// 把一些空的图片地址与 非 http url 地址去掉
val realImages = imageUrls?.filter {
!(it.isNullOrBlank()) && it.isHttpUrl() }
if (realImages.isNullOrEmpty()) {
onLoadFinish()
return
}
val countDown = AtomicInteger(realImages?.size ?: 0)
realImages?.forEach {
preloadSingleImage(it){
val result = countDown.decrementAndGet