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)方法来更改磁盘缓存的大小.
其他很棒的图书馆:
标签:image-loading,android,image,picasso,android-image 来源: https://codeday.me/bug/20191010/1886729.html