这里看下面的代码,
for (String path : all_path) {
bmp = BitmapFactory.decodeFile(path);
bitmapList.add(bmp);
}
这段代码让我抓狂。在每次迭代中,调用BitmapFactory.decodeFile(path)并将内存驱动到其选择,结果发生OutOfMemory异常。我尝试在解码新位图之前在循环中使用recycle()旧位图,但这意味着毫无意义。我搜索了关于在循环中使用位图但没有找到一个的答案。我该怎么办?任何人都可以帮忙。
答案 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