Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在具有大图像的长listview中管理位图存储的最佳方法?_Android_Listview_Bitmap - Fatal编程技术网

Android 在具有大图像的长listview中管理位图存储的最佳方法?

Android 在具有大图像的长listview中管理位图存储的最佳方法?,android,listview,bitmap,Android,Listview,Bitmap,我有一个长列表视图(~300),每行都有大图像(~720*300)。现在,如果我滚动到Listview的末尾,我的hashmap(存储位图)可以保存300个图像。由于这一原因,我经常出现内存不足异常。解决这个问题的最好办法是什么 谢谢你的帮助。任何代码都会很棒 您可能需要像这样的库。毕加索帮助您下载图片,根据需要调整大小,并缓存它们。它还处理特定于ListView的问题,如释放内存以确保平滑滚动。为了解决需要在Android清单中增大堆的问题, 另外,延迟加载如果您在线加载图像,并且必须重复使用

我有一个长列表视图(~300),每行都有大图像(~720*300)。现在,如果我滚动到Listview的末尾,我的hashmap(存储位图)可以保存300个图像。由于这一原因,我经常出现内存不足异常。解决这个问题的最好办法是什么


谢谢你的帮助。任何代码都会很棒

您可能需要像这样的库。毕加索帮助您下载图片,根据需要调整大小,并缓存它们。它还处理特定于ListView的问题,如释放内存以确保平滑滚动。

为了解决需要在Android清单中增大堆的问题,
另外,延迟加载如果您在线加载图像,并且必须重复使用单元格

您可以使用imageloader library或aquery library加载图像。这将帮助我轻松下载图像,但如何解决我的问题呢?它们还将您的图像路径存储在手机中,并从该路径显示。还存储所有位图。若你们存储了300个图像,那个么会出现内存异常。是的,它们将图像存储在外部内存中,但它仍然会将图像保存在某些数据结构中,对吗?只有在那里它才会显示图像。这个数据结构在堆上。我也有同样的问题。你应该使用延迟加载来获得更多的图像。我真的建议使用毕加索。这是一个轻量级的库,有很多功能,包括你在这里寻找的功能。我不想一次保留300个,我想保留2到3倍的页面大小(页面上显示的项目)。有什么线索可以实现这一点?感谢您加载它们,您可以像大多数应用程序一样使用滚动至图像列表底部的“加载更多”,并重用以前使用的单元格。(这是无限适配器的教程)如果使用listview,单元格将自动恢复。它不是关于单元格,而是关于每个单元格的位图。对于不同的单元格,这将是不同的,并且不能被重用。它们是自动重用的,但不正确。您可以看到,如果添加一行,内存将增加。据推测,单元重用不应该占用更多内存,而应该替换现有内容。因此,应用程序可以加载无限图像。@VipulJ,毕加索正是这样做的,它有一个用于位图的LRU缓存,大小有限(约为可用内存的1/7)。它负责在缓存被填满时回收位图。