其他分享
首页 > 其他分享> > android-毕加索可以替我排队吗?

android-毕加索可以替我排队吗?

作者:互联网

关于毕加索的行为,这是一个我所不知道的关键点.

假设您正在展示十个项目的幻灯片.说,他们在屏幕上每个十秒钟.

理想的行为是这样的:在幻灯片放映开始时,我只需执行以下操作:

picasso.get( url1 )
picasso.get( url2 )
picasso.get( url3 )
picasso.get( url4 )
picasso.get( url5 )
picasso.get( url6 )
picasso.get( url7 )
picasso.get( url8 )
picasso.get( url9 )
picasso.get( url10 )

而且,事实上,毕加索会一次排在队列中.

如果我告诉毕加索一次预热10个网址,这是怎么回事?

毕加索是否可以一次只做一件事情,是否有这样的选择?

(随之而来的其他问题是,您可以取消队列,还是…?)

壁画

感谢这个页面上的一个惊人答案@alicanozkara我是第一次学习

https://github.com/facebook/fresco

(1.3万颗星)无论好坏,我认为毕加索时代可能已经过去.

解决方法:

我认为仅使用毕加索,您可以实现:

1)使用fetch()异步将所有图像加载到缓存中,如下所示:

Picasso.with(context).load(URL).fetch();

您还可以为要尽早加载的图像添加优先级:(也许为幻灯片的前几张图像设置高优先级)

Picasso.with(context)
.load(URL)
.priority(Picasso.Priority.HIGH) // Default priority is medium
.fetch();

2)关于取消队列,您可以在图像中添加一个公共tag(),并且可以随时暂停/取消/恢复!

private static final Object TAG_OBJECT = Object();

Picasso.with(context)
.load(URL)
.tag(TAG_OBJECT) 
// can be any Java object, must be the same object for all requests you want to control together.

然后我们可以像这样控制标签:

Picasso.with(context)
.pauseTag(TAG_OBJECT)
//.resumeTag(TAG_OBJECT)
//.cancelTag(TAG_OBJECT)

3)我想建议的另一件重要事情是,当您预加载图像时,仅将它们保存到磁盘缓存中,而仅在显示时才将它们加载到内存缓存中.这将防止从内存缓存中刷新其他重要图像:

Picasso  
.with(context)
.load(URL)
.memoryPolicy(MemoryPolicy.NO_STORE) //Skips storing the final result into memory cache.
.fetch()

4)要按顺序将图像加载到队列中,可以使用Picasso.Builder中的executor(ExecutorService)方法传递自己的ExecutorService(在您的情况下为SingleThreadExecutor).

您甚至可以通过在Picasso.Builder类中找到的downloader(Downloader)方法和memorycache(Cache)方法来更改磁盘缓存的大小.

其他很棒的图书馆:

Glide

Fresco

标签:image-loading,android,image,picasso,android-image
来源: https://codeday.me/bug/20191010/1886729.html