2015-04-09 7 views
13

Ich versuche Protokollieren Sie die Start-Latenz meiner App. So wie ich es tue, wird die Startzeit der App auf Application.onCreate festgelegt und eine öffentliche Methode bereitgestellt, die die Uhrzeit zurückgibt.Android - Probleme mit der Protokollierung der Start-Latenz

MyApplication extends Application { 
    Date startUpTime; 
    //Declare variables 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     setStartupTime(); 
     //other initializations 
    } 

    private void setStartUpTime() { 
     startUpTime = new Date(); 
    } 

    public Date getStartUpTime() { 
     return startUpTime; 
    } 
} 

MyActivity extends Activity { 
. 
. 
. 
    @Override 
    public void onStart(){ 
     logStartUpLatency(); 
     //other onStart stuff 
    } 

    private void logStartUpLatency() { 
     Date currentTime = new Date(); 
     Date startTime = (MyApplication)getApplicationContext().getStartUpTime(); 
     long latency = currentTime.getTime() - startTIme.getTime(); 
     Log.d("Start up Latency is ", Long.toString(latency)): 

    } 

Dies ist, wie ich meinen Start bin prüfung Latenz:

  • adb installieren myapk
  • die App ausführen, um die erste Start-up-Latenz zu erhalten. Ich kann sehen, dass die geloggte Latenz für den ersten Start korrekt ist.
  • Führen Sie die App erneut aus, um die Startlatenz zu testen. Die protokollierte Latenz ist korrekt für den Start (oder eine beliebige Anzahl nachfolgender Starts)
  • Jetzt habe ich den Versionscode und den Namen meiner App um 1 erhöht. Um ein Upgrade zu simulieren, habe ich den Befehl adb install -r myapk verwendet.
  • Jetzt starte ich die App erneut, um die erste Startlatenz nach dem Upgrade zu testen, obwohl es 3 Sekunden dauert, ist die Latenz nicht in den Charts.

Weiß jemand, warum das passieren könnte?

aktualisieren

Also, wenn ich die apk mit "adb installieren -r myapk" installieren, wird die App geht nicht der Myapplication.onCreate() durch.

Antwort

0

Also, wenn ich die apk mit "adb installieren -r myapk" installieren, wird die App nicht durch die Myapplication.onCreate gehen(). Das beantwortet also diese Frage. Ich werde eine separate Frage stellen, warum die Installation einer Anwendung mit "adb install -r myapk" und dann starten Myapk nicht durch MyApplication.onCreate()

gehen
0

Die Latenz, die Sie berechnen, ist in Millisekunden. Date#getTime() gibt die Nummer Millisekunden seit dem 1. Januar 1970 um Mitternacht GMT zurück.

Die beobachtete Zeit von 3 Sekunden ist wegen des Aufwands für die Deinstallation der alten und die Installation der neuen App Build.

10

Ich empfehle die Verwendung der TimingLogger Klasse. Gemäß der Dokumentation können Sie die verstrichene Zeit auf einfache Weise verfolgen und sogar Splits in den Prozess einfügen.

Diese

TimingLogger timings = new TimingLogger(TAG, "methodA"); 
// ... do some work A ... 
timings.addSplit("work A"); 
// ... do some work B ... 
timings.addSplit("work B"); 
// ... do some work C ... 
timings.addSplit("work C"); 
timings.dumpToLog(); 

produziert

D/TAG (3459): methodA: begin 
D/TAG (3459): methodA:  9 ms, work A 
D/TAG (3459): methodA:  1 ms, work B 
D/TAG (3459): methodA:  6 ms, work C 
D/TAG (3459): methodA: end, 16 ms 
Verwandte Themen