adb devices
查看手机连接的设备
如果有多个设备,后面的命令加上 -s 设备id
eg
adb -s 设备id shell dumpsys meminfo
查看设备所有进程的内存信息
adb shell dumpsys meminfo
查看某一个进程的内存信息
adb shell dumpsys meminfo 进程id
当然,如果你不知道某一个进程的id的时候,可以通过关键字来过滤,在结果中找到进程 id
eg
adb shell dumpsys memeinfo |grep com.tencent
得到结果
508,928K: com.tencent.mm (pid 3486 / activities)
171,050K: com.tencent.mobileqq (pid 24707)
139,219K: com.tencent.mm:appbrand2 (pid 24329)
126,364K: com.tencent.mm:appbrand1 (pid 24254)
87,694K: com.tencent.mm:tools (pid 23795)
70,564K: com.tencent.mm:push (pid 5128)
63,009K: com.tencent.mm:toolsmp (pid 23660)
58,348K: com.tencent.mm:exdevice (pid 27949)
55,285K: com.tencent.mm:sandbox (pid 23743)
49,150K: com.tencent.mm:appbrand0 (pid 23252)
46,431K: com.tencent.mobileqq:MSF (pid 848)
...
所以 qq 的 pid 就是 24704
注意,每次杀掉应用,进程id就会发生变化
然后我们就可以通过 pid 来看内存信息了
执行命令后,会发现有很多信息,但是我只关心
TOTAL: 141751 TOTAL SWAP PSS: 464
这一行
所以我 grep 一下
adb shell dumpsys meminfo 24704 |grep TOTAL:
但是我要实时检测,所以就写了一个 java 脚本,300 毫秒打印一次
object MemMain {
@JvmStatic
fun main(ags: Array<String>) {
while (true) {
Thread.sleep(300)
var command = "adb shell dumpsys meminfo 改成pid |grep TOTAL:"
val processList: MutableList<String> = ArrayList()
try {
var process = Runtime.getRuntime().exec(command)
val input = BufferedReader(InputStreamReader(process.inputStream))
var line: String? = null
while (input.readLine()?.also { line = it } != null) {
line?.let {
processList.add(it)
}
}
input.close()
} catch (e: IOException) {
e.printStackTrace()
}
for (line in processList) {
println(line)
}
}
}
}