我正在编写一个图像处理工具,出于图像质量的原因,我想以尽可能大的尺寸编辑图像。
我需要注意不要在我的应用程序运行时耗尽内存。此外,我想利用具有大量内存的设备。例如,我想在 G1 等功能较弱的设备上支持中等尺寸的图像,而让 Samsung Galaxy S 等功能更强大的设备支持大尺寸图像。
是否有可靠的方法来衡量我的应用可以使用多少内存?
我目前的想法是,在决定要加载的图像大小时,设备可以计算使应用程序的内存使用率尽可能接近 70% 的图像大小(即不是 100%,因为您不希望应用程序在稍后或由于内存 fragment 而在小分配上崩溃)
我发现我可以使用以下代码返回可用内存的百分比:
double totalMemoryUsed = (Runtime.getRuntime().totalMemory() + android.os.Debug.getNativeHeapAllocatedSize());
int percentUsed = (int)(totalMemoryUsed / Runtime.getRuntime().maxMemory() * 100);
新位图添加到 native 堆分配部分。这似乎是可靠的,因为当 percentUsed 超过 100% 时,我的应用程序会因内存不足错误而崩溃。我需要注意上述计算的任何注意事项吗?
最佳答案
Are there any caveats to the above calculation I need to be aware of?
我的第一个想法是,您真的只能依赖执行计算时的瞬间计算的准确性。 Android 有各种在后台运行的服务和其他应用程序。在任何给定时刻,当前使用的内存量都会发生变化。在您再次执行计算之前,没有办法知道多少。此外,没有两部手机会完全相同,因此您真的无法准确估计它。
你几乎需要一个线程或异步任务来不断地重新计算它,我不确定这是个好主意。
我会偏离这一点,并考虑使用不同的策略构建您的应用程序。但如果你继续追求它,祝你好运。
关于java - 如何判断 Android 应用程序还剩多少内存可供使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4726097/