如何在 android 应用程序中获取 CPU 某些功能的用法?
How to get CPU usage of certain function in android app?
我正在尝试在 运行 应用程序的某个位置获取 CPU 用法。我需要像我用来测量时间的东西。
在我调用函数之前(我想测量)我用System.currentTimeMillis()
来获得开始时间和具有相同值的差异功能结束后。
运行这个函数的时间可以是1到1000ms。
地雷解决方案:
我可以使用每毫秒触发一次的 adb top 命令(但我认为它无法正常工作)adb shell top -m 15 -d 0.001 > C:\something\something\results.txt
或者,我正在考虑在另一个线程中从 运行 应用程序调用此命令(如果 函数 将结束,那么线程也会)。如果您认为这可能是正确的方法,我是否仍可以将命令结果发送到 phone 中的某个文件?
或者我应该使用 adb shell top -m 15 -d 0.001 -n 1
并在 中调用它while 循环直到线程结束?
如果您所说的函数是字面上的 java 函数,那么您为什么不测量 CPU 它的执行时间(结束和开始测量的差异)?您可以使用 System.currentTimeMillis()
但这也将测量获得 CPU 量程的其他线程的时间。所以我相信你在 Debug.threadCpuTimeNanos() 之后,它只会测量 CPU 执行你的函数代码的时间,你可以通过查看来源来调查它是如何工作的:
http://androidxref.com/5.1.0_r1/xref/art/runtime/utils.cc#177
我不确定这是否是您要找的,我最近一直在研究 Android 调试,但我自己还没有尝试过。
这是来自 Android 开发者博客的 link:Traceview War Story。
它描述了使用 Traceview 工具分析函数以及系统为该函数中的每个进程投入了多少时间。
我正在尝试在 运行 应用程序的某个位置获取 CPU 用法。我需要像我用来测量时间的东西。
在我调用函数之前(我想测量)我用System.currentTimeMillis()
来获得开始时间和具有相同值的差异功能结束后。
运行这个函数的时间可以是1到1000ms。
地雷解决方案:
我可以使用每毫秒触发一次的 adb top 命令(但我认为它无法正常工作)adb shell top -m 15 -d 0.001 > C:\something\something\results.txt
或者,我正在考虑在另一个线程中从 运行 应用程序调用此命令(如果 函数 将结束,那么线程也会)。如果您认为这可能是正确的方法,我是否仍可以将命令结果发送到 phone 中的某个文件?
或者我应该使用 adb shell top -m 15 -d 0.001 -n 1
并在 中调用它while 循环直到线程结束?
如果您所说的函数是字面上的 java 函数,那么您为什么不测量 CPU 它的执行时间(结束和开始测量的差异)?您可以使用 System.currentTimeMillis()
但这也将测量获得 CPU 量程的其他线程的时间。所以我相信你在 Debug.threadCpuTimeNanos() 之后,它只会测量 CPU 执行你的函数代码的时间,你可以通过查看来源来调查它是如何工作的:
http://androidxref.com/5.1.0_r1/xref/art/runtime/utils.cc#177
我不确定这是否是您要找的,我最近一直在研究 Android 调试,但我自己还没有尝试过。
这是来自 Android 开发者博客的 link:Traceview War Story。
它描述了使用 Traceview 工具分析函数以及系统为该函数中的每个进程投入了多少时间。