2010-03-28 12 views
26

Come posso testare tutti i seguenti metodi codice? Voglio giocare a scenari in cui tutti stanno accadendo per vedere se il mio codice funziona per salvare/ripristinare il processo di un'attività. Quindi cosa dovrei fare nell'emulatore per testare tutti i metodi?Come testare il codice creato per salvare/ripristinare il ciclo di vita di un'attività?

public class Activity extends ApplicationContext { 
    protected void onCreate(Bundle savedInstanceState); 

    protected void onStart(); 

    protected void onRestoreInstanceState(Bundle savedInstanceState); 

    protected void onSaveInstanceState(Bundle savedInstanceState); 

    protected void onRestart(); 

    protected void onResume(); 

    protected void onPause(); 

    protected void onStop(); 

    protected void onDestroy(); 
} 

risposta

6

onCreate, onStart e onResume verrà eseguito quando si avvia l'applicazione, non c'è nessuna ulteriore interazione necessaria. , onStop e onDestroy verranno eseguiti quando esci, ad es. premendo ripetutamente il pulsante Indietro.

Per provare onRestart, onSaveInstanceState e onRestoreInstanceState, dopo aver lanciato l'applicazione, provare a premere il tasto Home, il lancio di alcune altre applicazioni per garantire la vostra attività sarà ucciso, quindi lanciare nuovamente l'applicazione.

Utilizzo della registrazione per verificare se i metodi sono stati chiamati.

(Attività documentazione del ciclo di vita: http://developer.android.com/guide/topics/fundamentals.html#actlife)

+0

Generalmente aspetto che il sistema Android interrompa il processo, utilizzo il sistema> app> seleziona l'app> forza l'opzione stop, ma sono io – Pyrodante

+6

@Pyrodante Non è possibile testare il ripristino dello stato se si interrompe il processo.L'eliminazione del processo cancella la memoria dell'applicazione, il che significa che gli stati vengono persi. Quando apri l'applicazione, dovresti vedere il tuo primo schermo invece di dove sei partito. – Pijusn

+8

"Lancia un mucchio di altre cose e torna indietro" non è una strategia di test. –

7

Per testare onSaveInstanceState e onRestoreInstanceState è possibile utilizzare lo strumento SetAlwaysFinish (vedi link sotto) o le DevTools app incluso con l'emulatore.

http://bricolsoftconsulting.com/how-to-test-onsaveinstancestate-and-onrestoreinstancestate-on-a-real-device/

Entrambe queste applicazioni utilizzano un ambiente nascosto chiamato AlwaysFinish che fa parte della classe ActivityManagerNative per modificare il comportamento del sistema operativo Android. Con il nuovo comportamento, il sistema operativo scarica qualsiasi attività non appena lascia lo schermo, attivando l'evento onSaveInstanceState. Quando il SO vuole riportare l'attività, chiamerà l'evento onRestoreInstanceState.

Il link qui sopra spiega come utilizzare l'app per testare SetAlwaysFinish onSaveInstanceState e onRestoreInstanceState eventi della vostra app. Se si desidera utilizzare DevTools, quindi abilitare Impostazioni di sviluppo> Distruggere immediatamente le attività.

+0

Questo è meraviglioso. Non lo sapevo mai e questo ha funzionato perfettamente! – Kirk

+0

Ottime informazioni, qui ci sono alcuni pangrattato per gli altri http://developer.android.com/tools/debugging/debugging-devtools.html –

116

Se è stata attivata Opzioni sviluppatori sul dispositivo, v'è un'opzione Non tenere attività che aiuteranno prova onRestoreInstanceState().

+6

Questa dovrebbe essere la risposta accettata, perché ha risultati prevedibili (non è necessario aprire un numero casuale di app casuali) e non è necessario installare un'app di terze parti con accesso root. –

+0

@ max.mustermann Non solo fornisce risultati prevedibili, ma è il metodo previsto per testare il salvataggio e il ripristino dello stato. – Pijusn

+0

Sul mio dispositivo non c'era una tale casella di controllo; invece c'era "Limite dei processi in background". Ma per qualche motivo le opzioni "Nessun processo in background" e "Al massimo 1 processo" non hanno funzionato; le app sono state appena distrutte senza alcuna istanza salvata. In ogni caso, "Al massimo 2 processi" ha funzionato bene, basta passare attraverso almeno tre app per forzare il sistema a destinare la tua app. Forse salverà il tempo di qualcuno. –

9

Si è verificato un problema durante il quale il riavvio di un'app dopo lunghi periodi di inattività si è interrotta. Abbiamo riscontrato che "Non tenere attività" non stava riproducendo il problema, ma lo ha fatto Background process settings :: No background processes in Dev Settings (anche durante il debug).

+1

Fantastico. Ho controllato Nessun processo in background e funziona. Sono in 5.1.1. Grazie – thuongle

1

C'è un altro modo per testare questi eventi. Per prima cosa devi passare all'attività specifica che desideri testare, quindi premere il pulsante Home e andare al monitor del dispositivo Android.

Android device monitor location

Android device monitor example

In questo strumento è possibile selezionare un filo della Domanda e uccidere con il pulsante di arresto. Per ultimo, devi aprire l'app dalla cronologia e il thread verrà ricreato di nuovo.

Problemi correlati