Android Glide中的downloadOnly是同步还是异步的?

5
考虑以下代码行:

考虑以下代码行:

Glide.with(getContext()).downloadOnly().load(some_uri).submit();

问题1) 上述是同步还是异步的?

问题2) 如果上述是同步的,那么我该如何使其变为异步?

问题3) 如果上述是异步的,那么我该如何使其变为同步?

这个问题是特指Glide版本4 API。

2个回答

17

回答我自己的问题。

Glide.with(getContext()).downloadOnly().load(some_uri).submit();

是异步的。

Glide.with(getContext()).downloadOnly().load(some_uri).submit().get();

同步的。


好的!你能指定信息来源吗?我一直在尝试帮助你,但在文档中找不到这个。 - Misha Akopov
@MishaAkopov,Glide开发人员之一回答了这个问题。https://github.com/bumptech/glide/issues/2775。我自己进行了进一步的测试,包括一个简单的Log.d(...)语句,并检查是否所有请求都按顺序返回。 - AlanSTACK
啊,很遗憾文档中没有这样的东西。 - Misha Akopov
@MishaAkopov 我认为你提到的文档已经解答了我的问题。然而,由于它使用了稍微不同的方法签名,并且没有明确说明,这让我感到不舒服和焦虑。 - AlanSTACK

0

Glide的downloadOnly() API允许您将图像的字节下载到磁盘缓存中,以便稍后检索。您可以在UI线程上异步使用downloadOnly() downloadOnly(Y target),也可以在后台线程上同步使用donwloadOnly(int, int)。请注意,参数略有不同,异步API需要一个Target,而同步API需要一个整数宽度和高度。

要在后台线程上下载图像,必须使用同步版本:

FutureTarget<File> future = Glide.with(applicationContext)
    .load(yourUrl)
    .downloadOnly(500, 500);
File cacheFile = future.get();

一旦未来返回,图像的字节将在缓存中可用。通常,downloadOnly() API仅用于确保字节可用于磁盘上。虽然您可以访问底层缓存文件,但通常不建议与其交互。

相反,当您稍后想要检索图像时,可以使用普通调用进行操作,只有一个例外:

Glide.with(yourFragment)
    .load(yourUrl)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .into(yourView);

这是过时的(v3)。我对(v4)感兴趣。开发人员弃用了某些方法(你所引用的那些),并已经替换为新的方法。我之所以问是因为我已经阅读了所有可用的文档,但没有找到我需要的内容。 - AlanSTACK
啊,好的,现在我明白你想要v4版本了。 - Misha Akopov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接