在后台线程中加载与缓存数据
为了使后台加载资源和与媒体交互更加容易,除了Glide.with(fragment).load(url).into(view)
这个API外,Glide还提供了额外两个API。
downloadOnly(int, int)
into(int, int)
downloadOnly方法
Glide的downloadOnly(int, int)
方法允许你把图片bytes下载到磁盘缓存中,以便以后获取使用。你可以在UI线程异步地调用downloadOnly()
,也可以在后台线程同步的使用。但是,注意他们的参数有些不同,异步API的参数是Target
,同步api的参数是宽和高的整数值。
为了在后台线程下载图片,你必须使用同步方法
FutureTarget<File> future = Glide.with(applicationContext)
.load(yourUrl)
.downloadOnly(500, 500);
File cacheFile = future.get();
当future返回时,图片的bytes数据就在缓存中可用了。一种典型的情况是,你使用downloadOnly()
API只是为了确保数据下载到了磁盘上。一般情况下,虽然你有权访问底层的缓存文件,但是你不需要直接和它交互。
而是,当你想要获取这个图片时,你只要像平常加载图片时那样调用就行,只有一点不同:
Glide.with(yourFragment)
.load(yourUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(yourView);
通过传入 DiskCacheStrategy.ALL
或者DiskCacheStrategy.SOURCE
,确保Glide可以使用你通过downloadOnly()
下载的数据。
into方法
如果你想在一个后台线程与一张已经解码的图片交互。你可以使用这个版本的into()
方法来返回一个FutureTarget
。例如,获取一张中心剪裁后的500*500像素的图片:
Bitmap myBitmap = Glide.with(applicationContext)
.load(yourUrl)
.asBitmap()
.centerCrop()
.into(500, 500)
.get()
虽然into(int, int)
方法在后台线程中很有效,但是,你不能把它用在主线程中。即使这个同步方法在你的主线程中不会抛出异常,调用get()也会阻塞主线程。会使你的APP性能变差,反应迟钝。