在标准JVM(例如,版本1.8)中,我们可以像这样访问当前线程的时间:
ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
在Android(即Dalvik VM)中获取当前线程时间的等效方法是什么。
答案 0 :(得分:0)
我不熟悉Java API中的任何等效内容。
超越Java API思考,但是......你能从top
收集任何有用的信息吗?
top -t
显然会在报告中包含特定于线程的信息。这是在我的一台设备上运行的结果:
似乎有可用的线程和CPU利用率数据。
访问此输出将涉及一些原始形式的输入流处理,例如
try {
final String cmd = "top -t"
final Process ps = Runtime.getRuntime().exec(cmd);
ps.waitFor();
final InputStream instream = ps.getInputStream();
...
} catch(Throwable t) { /* handle errors */ }
} finally { /* clean-up */ }
答案 1 :(得分:0)
所以,我在Android中找到了这个解决方案:
SystemClock.currentThreadTimeMillis();
返回当前线程中运行的毫秒数。
答案 2 :(得分:0)
获取线程CPU使用率的指示。返回的值表示 当前线程花费在执行代码上的时间或 等待某些类型的I / O。
时间以纳秒表示,仅在以下情况下有意义 与先前通话的结果相比。注意纳秒 分辨率并不表示纳秒精度。
在不支持此操作的系统上,调用返回-1。
在Android运行时中执行本机调用之后,它会调用ThreadCpuNanoTime方法,该方法使用您需要的CLOCK_THREAD_CPUTIME_ID
。
或者,您可以将其实现为执行相同操作的JNI方法。但是,这可能会产生额外的开销,因为内部方法可能被标记为“快速JNI”调用。这意味着,运行时知道特定的C代码在做什么,因此它无法完全构造/破坏JNI环境。
System.nanoTime()
和currentTimeMillis()
均未绑定到线程,并使用CLOCK_MONOTONIC
。