在后台线程或UI线程中加载图像?

时间:2016-12-30 20:00:50

标签: android picasso

我的Android应用程序有一个ListView,它在后台从网络中提取一组图像网址,然后将其传递给UI线程。 UI线程然后下载图像并显示它们(我正在使用Picasso来确保缓存和调整大小。)

我想知道是否应该在后台线程中下载图像,然后只将调整大小的位图传递给UI线程进行显示。此外,当用户在两个场景中滚动屏幕时会发生什么 - 是否会再次从Web检索所有图像?在这种情况下,我无法理解哪个会更快。该应用程序与Facebook安卓应用程序非常相似。

还有一件事 - 我的应用程序每隔5分钟刷新一次,如果列表中有任何新的图像网址,它将从后台线程开始重新启动整个过程。我的想法是,由于早期的图像会缓存,因此不会再次加载它们。只会加载新的网址。这是对的吗?

2 个答案:

答案 0 :(得分:0)

所有网络操作都在Android后台运行,Picasso也不例外。滚动列表时,毕加索会检查缓存,如果缓存中没有特定图像,则会下载它。

答案 1 :(得分:0)

  

UI线程然后下载图像并显示它们(我正在使用Picasso来确保缓存和调整大小。)

Picasso默认情况下不会在主应用程序线程上下载图像。我甚至不确定是否有选择这样做。

  

我想知道是否应该在后台线程中下载图像,然后只将调整后的位图传递给UI线程进行显示。

毕加索应该为你做这件事。

  

此外,当用户在两个场景中滚动屏幕时会发生什么 - 是否会再次从网络上检索所有图像?

这取决于图像数量,图像大小,缓存大小等等。 Picasso为您提供了确定其行为方式的选项,从角落中的调试指示器指示图像源(setIndicatorsEnabled(true))以获取StatsSnapshot来告诉您缓存的执行情况({{1} })。