在我最近的android项目中,我必须从网络上获取大量图像并将其显示在我的主要活动中(类似于探索Instagram应用程序的一部分)。我使用了带有3列的gridLayoutManager的recyclerView,我必须从URL获得约700张图像。当我打开应用程序并注释正在获取图像的部分时,应用程序运行正常(应用程序获取每个图块的信息,但不显示图像)。但是,当我开始设置图像位图时,加载大约一百张图像后,该应用程序开始变得缓慢并崩溃。 你推荐我做什么? 另一个问题是:使用recyclerView是一个明智的主意吗? 感谢您的答复。
答案 0 :(得分:1)
不加载数百张图像。这需要一些注意事项:
1)不要将图像存储在适配器的内存中。存储图片的url / resourceid /任何内容,以便您可以按需加载它。
2)使用大小受限制的LRU图像缓存,并通过该缓存加载图像。
3)确保下载的图像不会产生太多并发请求,并且在不再需要时(将要进入的视图被回收),请求将被取消。
4)我建议下载图像并将其写入磁盘,然后根据需要从磁盘加载它们。这样可以避免下载时将整个文件保留在内存中进行解码,从而减少了下载时的内存使用量。
5)请勿在UI线程上解码图像。在另一个线程上做。
6)如果不需要全尺寸显示图像,请制作缩略图。
RecyclerView中的图像,特别是如果要下载图像,则需要做很多工作才能做好并处理快速滚动。
答案 1 :(得分:0)
您应该在此处发布一些代码,但似乎您正在要求一些有效的设置。
首先,尝试使用一些图像缓存库,例如Glide或 Picasso。它在本地管理和缓存您的图像,因此您最终不会 多次请求同一张图片。
这解决了您的大部分问题,请勿尝试加载700张图像 并显示使用延迟加载的方式意味着首先加载10-20张图像 首先,当用户滚动时,再对另一个10-20进行API调用 等等。
此处是有关如何使用 Glide 及其工作方式的文章。
https://futurestud.io/tutorials/glide-image-resizing-scaling