当我的应用程序要求更多内存时,Android不会自动终止/释放内存

问题描述:

我有一个使用大量内存进行像素操作的Android应用程序。而我注意到的是,android并没有杀死程序或释放内存而转而使用前台应用程序。而我的应用程序只是崩溃,没有足够的内存错误。现在我有它自动检测剩余多少内存并适当缩放图片。这可以防止崩溃,但会导致图像质量不佳。当我的应用程序要求更多内存时,Android不会自动终止/释放内存

有没有办法告诉Android操作系统,释放内存,因为我的应用程序内存饿了。从我从android读取的内容中,操作系统应该自动执行此操作。但它似乎没有做到这一点。也许我错过了什么? iPhone似乎处理得好得多。

避免使用getPixel()setPixel()太多,因此会导致非常糟糕的性能,这在Android文档中已经提到。 另外,管理您自己的内存使用情况Java,Garbage Collector只要遵循规则即可运行。

Android应用程序具有不同设备之间的硬堆栈Java限制。 24MB是一个典型的数量。

因此,显而易见的解决方法是不要在Java中分配您的大对象...您可以改用本地C方法中的像素字节数组。

然而,24MB应该足以让任何人借用一个短语,所以我建议你也尝试重新考虑你的方法。也许更加积极的重用固定大小的池中的位图,将图像分解成更小的图块等等。

+0

大对象只是位图。我已经重新使用位图来防止漏洞。解析/ proc/meminfo接缝可为设备上的内存量提供最可靠的结果。从我的测试到目前为止,我分配一个位图时出现内存不足错误(还没有出现任何其他原因的内存错误),对我来说,似乎发生在设备本身物理内存不足而不是Java堆限制时当proc/meminfo的图形接近0时达到。 –

+0

当我杀死应用程序时,我可以使用更多的内存而不会造成任何形式的崩溃。我会尝试在本地分配所有东西,看看是否有帮助。 –