Wenn Sie die Zurück-Taste drücken, möchte ich, dass meine Anwendung in den gestoppten Zustand und nicht in den zerstörten Zustand wechselt.
In den Android- Dokumenten heißt es:
... haben nicht alle Aktivitäten das Verhalten, dass sie zerstört werden, wenn BACK gedrückt wird. Wenn der Benutzer in der Musikanwendung mit der Musikwiedergabe beginnt und dann ZURÜCK drückt, überschreibt die Anwendung das normale Rückverhalten, verhindert, dass die Spieleraktivität zerstört wird, und spielt weiterhin Musik ab, obwohl ihre Aktivität nicht mehr sichtbar ist
Wie repliziere ich diese Funktionalität in meiner eigenen Anwendung?
Ich denke, es muss drei Möglichkeiten geben ...
Erfassen Sie das Drücken der Zurück-Taste (wie unten) und rufen Sie dann die Methode (n) auf, die die Home-Taste aufruft.
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Log.d(this.getClass().getName(), "back button pressed"); } return super.onKeyDown(keyCode, event); }
Erfassen Sie das Drücken der Zurück-Taste und fälschen Sie dann ein Drücken der Home-Taste.
Erfassen Sie das Drücken der Zurück-Taste und starten Sie dann eine Aktivität des Startbildschirms, wodurch die Aktivität meiner Anwendung effektiv in den gestoppten Zustand versetzt wird.
Bearbeiten: Ich kenne mich mit Diensten aus und verwende einen in der Anwendung, mit der dieses Problem zusammenhängt. Bei dieser Frage geht es speziell darum, die Aktivität beim Drücken der Zurück-Taste in den gestoppten Zustand und nicht in den zerstörten Zustand zu versetzen.
Antworten:
Meistens müssen Sie einen Dienst erstellen , um etwas im Hintergrund auszuführen, und Ihr Sichtbares
Activity
steuert dies einfachService
. (Ich bin sicher, dass der Musik-Player auf die gleiche Weise funktioniert, daher scheint das Beispiel in den Dokumenten etwas irreführend zu sein.) Wenn dies der Fall ist,Activity
können Siefinish
wie gewohnt und dasService
wird weiterhin ausgeführt.Ein einfacherer Ansatz besteht darin, den
Back
Tastendruck zu erfassen und moveTaskToBack (true) wie folgt aufzurufen :Ich denke, die bevorzugte Option sollte sein, dass eine Aktivität normal beendet wird und sich selbst neu erstellen kann, z. B. bei Bedarf den aktuellen Status von einem Dienst lesen. Aber
moveTaskToBack
kann als schnelle Alternative gelegentlich verwendet werden.HINWEIS : Wie von Dave unten ausgeführt, hat Android 2.0 eine neue
onBackPressed
Methode eingeführt und diese Empfehlungen zum Umgang mit der Schaltfläche Zurück.quelle
Verwenden Sie den folgenden Code:
quelle
Wenn Sie den Zurück-Button abrufen möchten, schauen Sie sich diesen Beitrag im Android Developer Blog an . Es behandelt den einfacheren Weg, dies in Android 2.0 zu tun, und den besten Weg, dies für eine Anwendung zu tun, die auf 1.x und 2.0 läuft.
Wenn Ihre Aktivität jedoch gestoppt wird, wird sie je nach Speicherverfügbarkeit auf dem Gerät möglicherweise trotzdem beendet. Wenn Sie möchten, dass ein Prozess ohne Benutzeroberfläche ausgeführt wird, sollten Sie eine erstellen
Service
. In der Dokumentation wird Folgendes zu Services angegeben:Diese scheinen für Ihre Anforderungen angemessen zu sein.
quelle
Versuchen Sie,
onBackPressed()
die in der android.app.Activity-Klasse definierte Leere zu überschreiben .quelle
Wenn es jemand anderem hilft, hatte ich eine Aktivität mit 2 Layouts, die ich aus Gründen der Sichtbarkeit ein- und ausschaltete und versuchte, eine Art Struktur von Seite1> Seite2 zu emulieren. Wenn sie sich auf Seite 2 befanden und die Zurück-Taste drückten, wollte ich, dass sie zu Seite 1 zurückkehren. Wenn sie die Zurück-Taste auf Seite 1 drückten, sollte dies weiterhin wie gewohnt funktionieren. Es ist ziemlich einfach, aber es funktioniert
hoffe es hilft jemandem, Prost
quelle
Arbeitsbeispiel ..
Stellen Sie sicher, dass Sie nicht super.onBackPressed () aufrufen.
Auf diese Weise verhält sich Ihre Zurück-Taste wie die Home-Taste. Es beendet Ihre Aktivität nicht, sondern bringt sie in den Hintergrund
Zweiter Weg ist , rief
moveTaskToBack(true);
inonBackPressed
und sicher sein , zu entfernensuper.onBackPressed
quelle
Noch besser, wie wäre es mit OnPause () :
Wird als Teil des Aktivitätslebenszyklus aufgerufen, wenn eine Aktivität in den Hintergrund tritt, aber (noch) nicht getötet wurde. Das Gegenstück zu onResume ().
Wenn Aktivität B vor Aktivität A gestartet wird, wird dieser Rückruf für A aufgerufen. B wird erst erstellt, wenn onPause () von A zurückgegeben wird
enter code here
keine längeren aus.Dieser Rückruf wird hauptsächlich verwendet, um einen dauerhaften Status zu speichern, den die Aktivität bearbeitet, und um sicherzustellen, dass nichts verloren geht, wenn nicht genügend Ressourcen vorhanden sind, um die neue Aktivität zu starten, ohne diese zuvor zu beenden.
Dies ist auch ein guter Ort, um Dinge wie Stoppanimationen und andere Dinge zu tun, die eine spürbare Menge an CPU verbrauchen, um so schnell wie möglich zur nächsten Aktivität zu wechseln oder um Ressourcen zu schließen, die exklusiven Zugriff haben, wie z. B. die Kamera.
quelle
Überschreiben Sie onBackPressed () nach Android 2.0. Sowie
quelle
Ich habe alle oben genannten Lösungen ausprobiert, aber keine davon hat für mich funktioniert. Der folgende Code hat mir geholfen, als ich versuchte, auf eine Weise zu MainActivity zurückzukehren, die onCreate aufruft:
Intent.FLAG_ACTIVITY_CLEAR_TOP ist der Schlüssel.
quelle
Ich habe @Mirko N. Antwort verwendet, indem ich den neuen benutzerdefinierten EditText erstellt habe
Stellen Sie dann Daten aus Ihrer Aktivität ein
Danke dir.
quelle