我正在编写图片库应用,但遇到内存不足的错误。我缓存了所有图像,但是当我尝试在图像之间切换非常快时,会出现问题。我假设应用程序分配内存的速度比GC有时间释放它们的速度快(因为当我缓慢切换图像时不会发生崩溃)。

经过数天的努力,我终于决定尝试在 list 文件中使用largeHeap设置。进行此设置后,无论我在图像之间切换的速度如何,我的应用程序都不再崩溃。

现在,我想知道是否有任何使用largeHeap设置的约定或一般准则,因为如果说一个记笔记的应用程序使用largeHeap可能没有多大意义。一般来说,哪些应用适合使用largeHeap设置?

谢谢

最佳答案



您可以在其中向用户说明为什么要迫使其他所有应用程序都超出内存,从而为您提供大量的堆空间。

就个人而言,我不会认为“图片库应用”符合资格。 AutoCAD,视频编辑器等将具有资格。

关于内存管理问题,请确保在API Level 11+上运行时在inBitmap上使用BitmapOptions,以便回收现有缓冲区,而不是进行垃圾回收。特别是对于图片库,其中的缩略图大小可能相当一致,回收现有缓冲区将是巨大的好处。这可以帮助整体内存消耗(即,您确实内存不足)和内存碎片(即,您获得一个OutOfMemoryError,具有足够的堆空间,但是由于Android的脆弱性,没有一个块足以容纳您的分配)压缩垃圾收集器)。

您还可以考虑查看现有的图像缓存实现,例如Picasso所具有的实现,以查看是否有一些可以学习(或可能只是重用)的技巧。

关于android - android:largeHeap =“true”约定?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17054454/

10-09 02:25