我正在编写一个图像处理工具,并且出于图像质量的原因,想要以尽可能大的尺寸编辑图像。
我需要小心,我的应用程序运行时不会耗尽内存。另外,我想利用具有大量内存的设备。例如,我想在G1等功能较弱的设备上支持中等大小的图像,让三星Galaxy S等功能更强大的设备支持大图像。
是否有可靠的方法来衡量我的应用可以使用多少内存?
我当前的想法是,在决定要加载的图像大小时,设备可以计算图像大小,使应用程序的内存使用量尽可能接近70%(即不是100%,因为你不希望应用程序稍后在小分配上崩溃或因内存碎片而崩溃)
我发现我可以使用以下代码返回可用内存的百分比:
double totalMemoryUsed = (Runtime.getRuntime().totalMemory() + android.os.Debug.getNativeHeapAllocatedSize());
int percentUsed = (int)(totalMemoryUsed / Runtime.getRuntime().maxMemory() * 100);
新的位图添加到本机堆分配的部分。这看起来很可靠,因为当使用百分比超过100%时,我的应用程序会因内存不足错误而崩溃。我需要注意上述计算是否有任何警告?
答案 0 :(得分:0)
以上是否有任何警告 计算我需要知道吗?
我的第一个想法是,你真的只能依靠计算的准确性,就像你执行它时的那样。 Android具有在后台运行的各种服务和其他应用程序。在任何给定的瞬间,当前使用的内存量将会发生变化。在再次执行计算之前,无法确定多少。此外,没有两部手机会相似,所以你真的无法准确估计它。
你几乎需要一个线程或异步任务,在不断的基础上重新计算它,我不确定这是个好主意。
我会偏离这一点,并考虑使用不同的策略构建您的应用。但如果你继续追求它,祝你好运。