Est-il possible de connaître l'heure de début d'une application? ActivityManager
fournit des pids etc pour chaque processus d'application, mais ne dit pas combien de temps le processus est en cours d'exécution.Comment trouver l'heure de fonctionnement/démarrage de l'application Android?
Répondre
Je ne sais pas s'il existe une API pour cela. Mais une approche serait d'utiliser quelque chose comme:
String pid = "yourpid";
BufferedReader reader = new BufferedReader (new InputStreamReader (new FileInputStream ("ls -ld /proc/"+pid)) , 1000);
Pour obtenir l'heure de début de votre application et le soustraient juste que le currentTime. Peut-être pas le meilleur moyen, mais c'est ce qui me vient à l'esprit. (Et je ne l'ai pas essayé ..)
Gl!
l'exécution de la commande génère une exception. pouvez-vous s'il vous plaît vérifier? –
Cela ramènera le temps de démarrage du processus (depuis le démarrage du système):
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);
}
}
Pour obtenir le temps de processus en cours d'exécution:
final long dt = SystemClock.elapsedRealtime() - getStartTime(Process.myPid());
Est-ce que cela nécessite des permissions root? – simekadam
Il n'a pas à l'époque. –
Avez-vous trouvé une belle façon de contourner cela? Je vois que l'obtention du PID peut aussi être lourde si vous voulez aussi le nom du paquet, le nom de l'activité, etc. – Shade
@Bhups, avez-vous eu une idée, comment pouvons-nous le faire? –