java - 如何判断 Android 应用程序还剩多少内存可供使用?

标签 java android image-processing mobile

我正在编写一个图像处理工具,出于图像质量的原因,我想以尽可能大的尺寸编辑图像。

我需要注意不要在我的应用程序运行时耗尽内存。此外,我想利用具有大量内存的设备。例如,我想在 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/

相关文章:

java - 查找数组元素的总和,Java

java - 在 java 中转换 thu jul 05 10 :30:00 ist 2012 format into 2012-07-11 10:30:00. 0 格式

安卓工作室。图像 Assets 尺寸生成

按下按钮后android隐藏键盘

android - 具有多个播放器的超强大SDK弹出声音

python - 如何检测图像中的一种颜色?

Java - 从另一个类获取给定的对象名称

java - 获取 HTTP 状态 400 - 必需的 MultipartFile 参数 'file' 在 spring 中不存在

python-2.7 - 区分手写和机器打印的文本

python-3.x - 如果我有AMD显卡,如何使用tensorflow-gpu版本?