2015-04-09 13 views
13

Sto cercando di registrare la latenza di avvio di mia app. Il modo in cui lo sto facendo è impostare l'ora di inizio dell'app su Application.onCreate e fornire un metodo pubblico che restituisca l'ora.Android - Problemi con la registrazione della messa in latenza

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)): 

    } 

Questo è come mi sto testando il mio avvio di latenza:

  • adb install myapk
  • eseguire l'applicazione per ottenere il primo latenza di avvio. Posso vedere la latenza registrato è corretto per il primo avvio
  • eseguire nuovamente l'applicazione per testare la latenza di avvio. La latenza registrata è corretta per l'inizio (o qualsiasi numero di avviamenti successivi)
  • Ora aumento il codice di versione e il nome della mia app per 1. Per simulare un aggiornamento, ho usato il comando adb install -r myapk.
  • Ora eseguo di nuovo l'app per testare la prima latenza di avvio dopo l'aggiornamento, anche se sono necessari 3 secondi, la latenza registrata è fuori dai grafici.

Se uno sa il motivo che potrebbe succedere?

Aggiornamento

Quindi, se installo l'apk utilizzando "adb install myapk -r", l'applicazione non sta andando attraverso il Myapplication.onCreate().

risposta

0

Quindi, se installo l'apk utilizzando "adb install myapk -r", l'applicazione non sta attraversando il Myapplication.onCreate(). In modo che risponda a questa domanda. Chiederò una domanda separata sul perché installare un'applicazione usando "adb install -r myapk" e quindi avviare myapk non passa attraverso MyApplication.onCreate()

0

La latenza si sta calcolando è espresso in millisecondi. Date#getTime() restituisce il numero di millisecondi dal 1 gennaio 1970, mezzanotte GMT.

Il tempo osservato di 3 secondi è a causa del sovraccarico per la disinstallazione del vecchio e l'installazione della nuova build dell'app.

10

suggerisco l'utilizzo della classe TimingLogger. Secondo la documentazione, è possibile tracciare facilmente il tempo trascorso e persino aggiungere divisioni nel processo.

Questo

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(); 

produce

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