2010-03-28 13 views
26

Wie kann ich alle folgenden Methoden testen? Ich möchte Szenarien spielen, wenn alle von ihnen passiert sind, um zu sehen, ob mein Code zum Speichern/Wiederherstellen einer Aktivität dient. Also, was soll ich im Emulator tun, um alle Methoden zu testen?Wie kann Code getestet werden, der zum Speichern/Wiederherstellen des Lebenszyklus einer Aktivität erstellt wurde?

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

Antwort

6

onCreate, onStart und onResume wird ausgeführt, wenn Sie die Anwendung starten, gibt es keine weitere Interaktion erforderlich. , onStop und onDestroy werden ausgeführt, wenn Sie z. durch wiederholtes Drücken der Zurück-Taste.

onRestart, onSaveInstanceState und onRestoreInstanceState Um zu testen, nachdem Ihre Anwendung startet, versuchen Sie die Home-Taste drücken, einige andere Anwendungen starten Sie Ihre Aktivität getötet werden, um sicherzustellen, dann wieder Ihre Anwendung starten.

Mit Protokollierung überprüfen, ob die Methoden aufgerufen wurden.

(Aktivität Lifecycle-Dokumentation: http://developer.android.com/guide/topics/fundamentals.html#actlife)

+0

Ich bin in der Regel auf das Android-System zu warten, um den Prozess zu beenden, verwende ich das System> apps> wählen Sie die App> erzwingen Stop-Option, aber das bin ich – Pyrodante

+6

@Pyrodante Sie können Zustand Wiederherstellung nicht testen, wenn Sie den Prozess beenden.Das Töten des Prozesses löscht den Anwendungsspeicher, was bedeutet, dass Zustände verloren gehen. Wenn Sie die Anwendung öffnen, sollten Sie Ihren ersten Bildschirm sehen und nicht, wo Sie ihn verlassen haben. – Pijusn

+8

"Starten Sie eine Menge anderer Dinge und kommen Sie zurück" ist keine Teststrategie. –

7

Um zu testen, onSaveInstanceState und onRestoreInstanceState Sie entweder das SetAlwaysFinish Tool verwenden können (siehe Link unten) oder die DevTools App mit dem Emulator enthalten.

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

verwenden Beide Anwendungen eine versteckte Einstellung AlwaysFinish genannt, die Teil der ActivityManagerNative Klasse ist das Verhalten des Android OS zu ändern. Unter dem neuen Verhalten wird das Betriebssystem alle Aktivitäten entladen, sobald es den Bildschirm verlässt und das onSaveInstanceState-Ereignis auslöst. Wenn das Betriebssystem die Aktivität zurückbringen möchte, ruft es das onRestoreInstanceState-Ereignis auf.

Der obige Link erläutert, wie Sie mit der SetAlwaysFinish-App die Ereignisse onSaveInstanceState und onRestoreInstanceState Ihrer App testen können. Wenn Sie die DevTools verwenden möchten, aktivieren Sie Entwicklungseinstellungen> Aktivitäten sofort löschen.

+0

Das ist wunderbar. Ich wusste nie davon und das hat perfekt funktioniert! – Kirk

+0

Große Info, hier sind einige Breadcrumbs für andere http://developer.android.com/tools/debugging/debugging-devtools.html –

116

Wenn Sie Entwickleroptionen auf Ihrem Gerät aktiviert haben, gibt es eine Option nicht Aktivitäten halten den Test onRestoreInstanceState() helfen.

+6

Dies sollte die akzeptierte Antwort sein, weil es vorhersagbare Ergebnisse (Sie müssen nicht zu öffnen zufällige Anzahl von zufälligen Apps) und Sie müssen keine Drittanbieter-App mit Root-Zugriff installieren. –

+0

@ max.mustermann Nicht nur es liefert vorhersagbare Ergebnisse, aber das ist die beabsichtigte Methode zum Testen von Zustandseinsparung und Wiederherstellung. – Pijusn

+0

Auf meinem Gerät gab es kein solches Kontrollkästchen; stattdessen gab es "Background processes limit". Aber aus irgendwelchen Gründen funktionierten die Optionen "Keine Hintergrundprozesse" und "Höchstens 1 Prozess" nicht; Apps wurden einfach zerstört, ohne dass instanceState gespeichert wurde. Howewer, "Höchstens 2 Prozesse" funktionierte gut - Sie müssen nur mindestens drei Apps wechseln, um das System zu zwingen, Ihre App zu zerstören. Vielleicht wird es jemand Zeit sparen. –

9

Wir hatten ein Problem, bei dem das erneute Starten einer App nach längerer Inaktivität fehlgeschlagen ist. Wir haben festgestellt, dass "Aktivitäten nicht beibehalten" das Problem nicht reproduziert, sondern Background process settings :: No background processes in Dev-Einstellungen (auch während des Debuggens).

+1

Ehrfürchtig. Ich habe keine Hintergrundprozesse überprüft und es funktioniert. Ich bin in 5.1.1. Vielen Dank – thuongle

1

Es gibt eine andere Möglichkeit, diese Ereignisse zu testen. Zuerst müssen Sie zu der spezifischen Aktivität navigieren, die Sie testen möchten. Drücken Sie dann die Home-Taste und gehen Sie zum Android-Gerätebildschirm.

Android device monitor location

Android device monitor example

In diesem Tool können Sie einen Thread der Anwendung auswählen und mit der Taste Stop töten. Zuletzt müssen Sie die App aus dem Verlauf öffnen und der Thread wird erneut erstellt.