我正在使用一个Android平板电脑应用程序,其中大量的工作与图像。
我必须在滚动视图中加载数百个大位图图像。一幅图像大约是1Mb到3Mb
我已经使用位图工厂和样本大小缩放图像,并且还在Async任务中加载所有图像。
我正在加载SD卡的所有图像。
滚动一些图像后仍然面临OUT OF MEMORY问题。 任何帮助,将不胜感激。 提前谢谢。
答案 0 :(得分:6)
您可以使用Univarsal Image Loader。这是更好的api图像下载和存储捕获。并从捕获。它对于图像操作来说是一个很好的api。
答案 1 :(得分:1)
这种情况经常出现在我们获取位图时所以只使用延迟加载。看看这个例子吧 http://sunil-android.blogspot.in/2013/09/lazy-loading-image-download-from.html
答案 2 :(得分:0)
为防止应用程序在没有完成任何操作的情况下吸收CPU时间,JVM会抛出此错误,以便您有机会诊断问题。
因为存储在本机区域的大位图内存 所以我建议你使用像Universal Image Loader或
这样的库答案 3 :(得分:0)
您必须找出OOM错误发生的时间。当你在没有发布的情况下在内存中有太多的位图缓存时,或者你在解码某个位图时只是遇到它?
对于第一种情况,我认为你应该自己管理你的位图缓存,或者使用上面提到的一些有效的第三方库。
对于第二种情况,我在一些低性能移动设备(通常具有512MB或更少的内存)上遇到它,当您将位图解码为请求的大小时,可能需要相当大的内存来存储位图, 240dpi设备,大约800 * 480 * 4 = 1.5MB,但是你可能无法在某些机器上分配那么多内存,因为它们可能有严格的内存管理策略来防止这么多的内存分配。你应该抓住OOM错误并继续而不是迷恋。
答案 4 :(得分:0)
在1280x800显示器中加载位图将占用1280x800x4字节(~4MB)的内存。 Java堆大小有限(约50MB),因此您不能在应用程序中使用大量的大型位图。在使用位图时,使用缓存和重用位图对象是必要的,但另一个有用的技巧是使用更大的臀部尺寸!为此,请将android:largeHeap="true"
添加到清单中的Application标记。它将臀部大小增加到比正常大4或5倍(约250MB)。我希望这可以帮助其他人在搜索时到达这个帖子!