如何在Android中获取当前内存使用量?

如何在Android中获取当前内存使用量?

我使用了/proc/meminfo并解析了命令响应,但是结果显示:

内存总数:94348 kB内存空闲:5784 kB

手段。它显示只有5MB的空闲内存。Android手机有可能吗?我的手机上只安装了5-6个应用程序,没有其他任务正在运行。但是,这个命令仍然显示出内存非常少。

有人能澄清这一点吗?或者,在Android中还有其他方法来获得内存的使用吗?


白衣非少年
浏览 1369回答 3
3回答

慕婉清6462132

注意:这个答案测量设备的内存使用/可用。这不是你的应用程序可以使用的东西。为了衡量你的应用程序正在做什么,并被允许做什么,使用Android开发者的答案.Android文档-ActivityManager.MemoryInfo解析/proc/meminfo命令。您可以在这里找到参考代码:在Android中获取内存使用情况使用下面的代码并获取当前RAM:MemoryInfo mi = new MemoryInfo();ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); activityManager.getMemoryInfo(mi);double availableMegs = mi.availMem / 0x100000L;//Percentage can be calculated for API 16+double percentAvail = mi.availMem / (double)mi.totalMem * 100.0;对0x100000L数的解释1024 bytes      == 1 Kibibyte 1024 Kibibyte   == 1 Mebibyte1024 * 1024     == 10485761048576         == 0x100000很明显,这个数字被用来从字节转换为mebi字节我们只需要计算一次总内存。因此,只在代码中调用1点,然后再重复调用第2点的代码。

MMMHUHU

这取决于您要获得的内存查询的定义。通常,您想知道堆内存的状态,因为如果它占用了太多内存,您就会得到OOM并使应用程序崩溃。为此,您可以检查下一个值:final Runtime runtime = Runtime.getRuntime();final long usedMemInMB=(runtime.totalMemory() - runtime.freeMemory()) / 1048576L;final long maxHeapSizeInMB=runtime.maxMemory() / 1048576L;final long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB;“usedmemInMB”变量越接近“maxHeapSizeInMB”,就越接近availHeapSizeInMB到零,你得到的OOM越近。(由于内存碎片,您可能在达到零之前获得OOM。)这也是DDMS内存使用工具所显示的。或者,有真正的RAM使用,这就是整个系统使用了多少-请参阅接受答案计算一下。更新:由于AndroidO使您的应用程序也使用本机RAM(至少对于位图存储,这通常是占用大量内存的主要原因),而不仅仅是堆,所以情况发生了变化,您得到的OOM更少(因为堆不再包含位图,请检查)。这里),但是如果你怀疑你有内存泄漏,你仍然应该注意内存的使用。在AndroidO上,如果内存泄漏本应导致旧版本的OOM,那么它似乎就会崩溃,而无法捕捉到它。下面是如何检查内存使用情况: val nativeHeapSize = Debug.getNativeHeapSize()  val nativeHeapFreeSize = Debug.getNativeHeapFreeSize()  val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize  val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize但我认为最好使用IDE的分析器,它使用图表实时显示数据。因此,Android O的好消息是,由于OOM存储了太多大位图,所以很难得到崩溃,但坏消息是,我认为在运行时不可能捕捉到这样的情况。

牛魔王的故事

下面是计算内存使用情况的一种方法当前正在运行的应用程序:public static long getUsedMemorySize() {     long freeSize = 0L;     long totalSize = 0L;     long usedSize = -1L;     try {         Runtime info = Runtime.getRuntime();         freeSize = info.freeMemory();         totalSize = info.totalMemory();         usedSize = totalSize - freeSize;     } catch (Exception e) {         e.printStackTrace();     }     return usedSize;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android