循环中回收位图

时间:2015-09-16 12:33:02

标签: android bitmap

这里看下面的代码,

for (String path : all_path) {
    bmp = BitmapFactory.decodeFile(path);
    bitmapList.add(bmp);
}

这段代码让我抓狂。在每次迭代中,调用BitmapFactory.decodeFile(path)并将内存驱动到其选择,结果发生OutOfMemory异常。我尝试在解码新位图之前在循环中使用recycle()旧位图,但这意味着毫无意义。我搜索了关于在循环中使用位图但没有找到一个的答案。我该怎么办?任何人都可以帮忙。

3 个答案:

答案 0 :(得分:0)

您正在将所有位图添加到列表中。但是,您对所有位图使用相同的引用变量bmp,因此在每次迭代中它们都会被替换。

但是在列表中添加了所有位图。如果有很多位图,那么最终会产生OutOfMemoryError

最好不要在列表中添加所有位图。

答案 1 :(得分:0)

尝试回收您未使用的位图。 如果使用所有位图而不是将它们添加到缓存中并在以后使用它们。
接下来当你想要更换一个时,你将只更换一个而不是全部 从下面的变化需要更多的工作,但它的工作原理,因为我使用了很多位图。
请看这里:
我曾经实施过这样的事情:
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

答案 2 :(得分:0)

位图可能很大。为什么你需要将它们全部读入内存? Normaly,您可以按需阅读每个位图。或者,您可以阅读缩略图,这些缩略图的内存要求更低(BitmapFactory使您能够在阅读时缩小位图的大小 - 使用BitmapFactory.Options,成员inSampleSize)。

阅读本文:http://developer.android.com/training/displaying-bitmaps/index.html