无论如何都要找出应用程序的开始时间?ActivityManager
为每个应用程序进程提供了pids等,但没有说明进程运行了多长时间。
答案 0 :(得分:0)
我不知道有没有这方面的API。但一种方法是使用类似的东西:
String pid = "yourpid";
BufferedReader reader = new BufferedReader ( new InputStreamReader ( new FileInputStream ( "ls -ld /proc/"+pid)) , 1000 );
获取应用程序的开始时间,然后用当前时间减去该时间。
可能不是最好的方式,但这就是我想到的。 (我还没试过......)
Gl!
答案 1 :(得分:0)
这将返回进程开始时间(自系统引导以来):
private static long getStartTime(final int pid) throws IOException {
final String path = "/proc/" + pid + "/stat";
final BufferedReader reader = new BufferedReader(new FileReader(path));
final String stat;
try {
stat = reader.readLine();
} finally {
reader.close();
}
final String field2End = ") ";
final String fieldSep = " ";
final int fieldStartTime = 20;
final int msInSec = 1000;
try {
final String[] fields = stat.substring(stat.lastIndexOf(field2End)).split(fieldSep);
final long t = Long.parseLong(fields[fieldStartTime]);
final int tckName = Class.forName("libcore.io.OsConstants").getField("_SC_CLK_TCK").getInt(null);
final Object os = Class.forName("libcore.io.Libcore").getField("os").get(null);
final long tck = (Long)os.getClass().getMethod("sysconf", Integer.TYPE).invoke(os, tckName);
return t * msInSec / tck;
} catch (final NumberFormatException e) {
throw new IOException(e);
} catch (final IndexOutOfBoundsException e) {
throw new IOException(e);
} catch (ReflectiveOperationException e) {
throw new IOException(e);
}
}
要获得进程运行时间:
final long dt = SystemClock.elapsedRealtime() - getStartTime(Process.myPid());