Android 使用Glide进行多任务处理
我有一个Android应用程序,可以在线和离线工作,我正在使用Glide加载图像。下载数据库后,我想同时启动两个任务:将所有图像下载到磁盘,并加载当前屏幕和下一屏幕上所需的所有图像。问题是要下载的图像数量非常大,当前屏幕上请求的图像似乎添加到同一下载队列的末尾。因此,在所有图像下载到磁盘缓存之前,我的屏幕都是空的。如何使这些任务并行工作Android 使用Glide进行多任务处理,android,android-glide,Android,Android Glide,我有一个Android应用程序,可以在线和离线工作,我正在使用Glide加载图像。下载数据库后,我想同时启动两个任务:将所有图像下载到磁盘,并加载当前屏幕和下一屏幕上所需的所有图像。问题是要下载的图像数量非常大,当前屏幕上请求的图像似乎添加到同一下载队列的末尾。因此,在所有图像下载到磁盘缓存之前,我的屏幕都是空的。如何使这些任务并行工作 public class GlideActivity extends AppCompatActivity { @Override protec
public class GlideActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_glide);
downloadAllImages();
updateUi();
}
private void updateUi() {
ImageView imageView1 = (ImageView) findViewById(R.id.image_view1);
ImageView imageView2 = (ImageView) findViewById(R.id.image_view2);
ImageView imageView3 = (ImageView) findViewById(R.id.image_view3);
cachedGlideRandomRequest().into(imageView1);
cachedGlideRandomRequest().into(imageView2);
cachedGlideRandomRequest().into(imageView3);
}
private void downloadAllImages() {
for (int i = 0; i < 50; i++) {
cachedGlideRandomRequest().preload();
}
}
private DrawableRequestBuilder<String> cachedGlideRandomRequest() {
return Glide.with(getApplicationContext())
.load("https://unsplash.it/200/300?image=" + System.nanoTime() % 1000)
.diskCacheStrategy(DiskCacheStrategy.SOURCE);
}
}
我想要的是在ImageView上显示图像,而下载的图像仍在后台工作。您可以将占位符图像设置为立即显示:
cachedGlideRandomRequest()
.placeholder(R.drawable.resource_to_show_now)
.into(imageView1);
您可以将占位符图像设置为立即显示:
cachedGlideRandomRequest()
.placeholder(R.drawable.resource_to_show_now)
.into(imageView1);
看来Glide确实为我的案例提供了一个优雅的解决方案。这是优先级方法。它允许设置所有下载的低优先级和屏幕图像的即时优先级。这里有一些。我最后的代码是:
private void downloadAll(List<String> imageUrls) {
for (String image : imageUrls) {
Glide.with(this).load(image).priority(Priority.LOW).preload();
}
}
private void downloadOnScreen(ImageView imageView, String imageUrl) {
Glide.with(this).load(imageUrl).priority(Priority.IMMEDIATE).into(imageView);
}
看来Glide确实为我的案例提供了一个优雅的解决方案。这是优先级方法。它允许设置所有下载的低优先级和屏幕图像的即时优先级。这里有一些。我最后的代码是:
private void downloadAll(List<String> imageUrls) {
for (String image : imageUrls) {
Glide.with(this).load(image).priority(Priority.LOW).preload();
}
}
private void downloadOnScreen(ImageView imageView, String imageUrl) {
Glide.with(this).load(imageUrl).priority(Priority.IMMEDIATE).into(imageView);
}
不完全是我要搜索的,但是很好的解决方法。你到底在寻找什么?我正在尝试创建两个下载队列或两个Glide实例。然后,我就可以下载所有服务中的图像,同时仍然可以下载活动所需的图像。如果队列按照您怀疑的方式工作,那么在下载图像之前调用updateUI是不起作用的?它适用于此活动,但在移动到下一个活动之后,下载队列似乎要加载很长一段时间。而且图像只有在下载完成后才会出现在UI上。这不完全是我要搜索的,而是很好的解决方法。你到底在寻找什么?我正在尝试创建两个下载队列或两个Glide实例。然后,我就可以下载所有服务中的图像,同时仍然可以下载活动所需的图像。如果队列按照您怀疑的方式工作,那么在下载图像之前调用updateUI是不起作用的?它适用于此活动,但在移动到下一个活动之后,下载队列似乎要加载很长一段时间。只有在下载完成后,图像才会显示在UI上。