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

Android 在后台线程或UI线程中加载图像?,android,picasso,Android,Picasso,我的android应用程序有一个列表视图,它在后台从web获取一组图像URL,然后将其传递给UI线程。然后UI线程下载图像并显示它们(我正在使用Picasso来确保缓存和调整大小) 我想知道是否应该在后台线程中下载图像,然后只将调整大小的位图传递给UI线程进行显示。另外,当用户在这两种情况下滚动屏幕时会发生什么情况?是否再次从web检索所有图像?我不知道在这种情况下哪一个会更快。该应用程序与Facebook android应用程序非常相似 还有一件事-我的应用程序将每5分钟刷新一次,如果列表中有

我的android应用程序有一个
列表视图
,它在后台从web获取一组图像URL,然后将其传递给UI线程。然后UI线程下载图像并显示它们(我正在使用
Picasso
来确保缓存和调整大小)

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


还有一件事-我的应用程序将每5分钟刷新一次,如果列表中有任何新的图像url,它将从后台线程开始重新启动整个过程。我的想法是,由于先前的图像已经缓存,因此不会再次加载它们。将只加载新的URL。这是否正确?

所有网络操作都在安卓系统的后台运行,毕加索也不例外。当你们滚动你们的列表时,毕加索检查它的缓存,若缓存中并没有特定的图像,它就会下载它

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

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

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

毕加索应该为你这样做

另外,当用户在这两种情况下滚动屏幕时会发生什么情况?是否再次从web检索所有图像


这取决于图像的数量、大小、缓存的大小等等。毕加索为您提供了一些选项来确定这是如何进行的,从角落中的调试指示器指示图像源(
setindicatorEnabled(true)
),到获取一个
statsnapshot
来告诉您缓存的执行情况(
getSnapshot()
)。

类似于Facebook应用程序-这是一个不错的选择;)类似于facebook加载图像的方式。我想知道在列表视图中滚动对于facebook这样的应用程序是如何工作的——它们是否在后台加载图像并将其缓存到磁盘/内存中?当我们收到新帖子时会发生什么?谢谢!假设我在应用程序中向下滚动,然后决定单击一下应用程序的顶部。什么是处理此类案件的最佳方式?@PranavSodhani:对不起,我不明白这个问题。好吧!让我再试一次。在我的应用程序中,当用户启动应用程序时,我最初会加载10幅图像。用户可以一直到屏幕的底部,我会再加载10张图片,这应该会继续——类似于facebook上的帖子加载方式。现在假设用户想要进入屏幕顶部,即一次点击滚动到顶部。处理这个问题的最佳方法是什么?我假设随着新图像的加载,毕加索将从缓存中删除旧图像,但现在既然用户应该看到旧图像,它是如何工作的?@PranavSodhani:“我假设随着新图像的加载,毕加索将从缓存中删除旧图像,但现在既然用户应该看到旧图像,它是如何工作的?”--图像要么在缓存中,要么不在缓存中。无论哪种方式,毕加索都能自动处理。除了将缓存调整为合适的大小(考虑到应用程序的所有其他考虑因素),您无需做任何事情。听起来很合乎逻辑。谢谢如果某人知道facebook应用程序是如何处理这一问题的,我会向他询问。