onRestart () wird aufgerufen, wenn die Zurück-Taste gedrückt wird, um dies zu verhindern?

8

Meine Anwendung ruft einige Webdienste auf, wenn sie neu gestartet wird. Ich möchte diese Webdienste auch aufrufen, wenn der Benutzer die App startet (die im Hintergrund ausgeführt wurde) und fortfährt. Ich habe alle Methoden untersucht, die ausgelöst werden, wenn Apps gestartet werden und wenn Aktivitäten im Fokus stehen. onStart (), onResume (), onRestart () usw. ....

Ich dachte onRestart wäre eine gute Wette, um meine Web-Service-Anrufe zu machen und meine Ansicht zu aktualisieren. Problem ist, wenn ich von Aktivität A (derjenige, der die Anrufe macht) zu Aktivität B gehe und den Zurück-Knopf drücke, wird Aktivität A ausgelöst onRestart () und rufen Sie die Webdienste auf. Ich möchte nicht, dass dies jedes Mal passiert, wenn ich von einigen Aktivitäten in meiner App auf meinen Hauptbildschirm zurückgehe. Ich möchte nur, dass die Dienste aufgerufen werden, wenn meine App-Aktivität A von außen in den Fokus gebracht wird. Sind ihr irgendwelche anderen Ereignisse, denen ich bewusst sein sollte, die mir helfen könnten? Wenn ich die Home-Taste drücke und dann auf mein App-Icon klicke, sollte es aktualisiert werden, aber nicht, wenn ich etwas auf meinem Hauptbildschirm anklicke, eine neue Aktivität öffne und dann die Zurück-Taste drücke.

Ich hoffe, die Frage ergibt Sinn.

Danke.

    
PaulG 05.12.2011, 18:35
quelle

3 Antworten

7

Laut dem Aktivitätszyklus wird onRestart vor% co_de aufgerufen %. Wenn Sie also Ihre Web-Aufrufe in onResume eingeben, wird sie beim ersten Start der Aktivität und bei jeder Wiederaufnahme aufgerufen. onResume wird nur aufgerufen, wenn der Benutzer zu dieser Aktivität zurück navigiert . Sie können also einen booleschen Wert in Ihrer Aktivität haben (z. B. boolean isActivityRestarting), der auf false gesetzt ist, und dann in onRestart auf true setzen. Wenn dies der Fall ist, wenn onRestart erreicht wird, führen Sie keine Webanrufe durch.

Beispielcode:

%Vor%     
Jason Robinson 05.12.2011, 19:12
quelle
4

Gut onCreate ist deine beste Wette, aber mit einigen Einschränkungen. (Hauptbildschirm hier ist der Bildschirm, der Webservice aufruft)

  • Wenn der Benutzer auf dem Hauptbildschirm die Taste ZURÜCK drückt, wird onCreate aufgerufen.
  • Wenn der Benutzer auf dem anderen Bildschirm die Taste BACK drückt und zum Hauptbildschirm zurückkehrt, wird onCreate nicht aufgerufen.
  • Wenn der Benutzer den Hauptbildschirm mit der HOME-Taste verlässt und durch langes Drücken der HOME-Taste und Auswahl der App zurückkehrt, wird onCreate nicht aufgerufen.

So weit so gut, hier ist der Haken.

  • Wenn der Benutzer die HOME-Taste zum Beenden und dann zum Launcher-Symbol drückt, wird onCreate nicht aufgerufen. Theoretisch ist es ein konsistentes Verhalten, aber es mag merkwürdig aussehen, da der Benutzer denkt, dass er / sie eine App von Anfang an startet und vergisst, wie er / sie anfänglich ausstieg.

Nach Ihrer Antwort ist onCreate der Weg, mit leichten Überprüfungen zu gehen.

Soln, wenn onStart oder onRestart verwendet wird:

Eine Überprüfung, die Sie vornehmen können, besteht darin, den Zeitstempel in Ihren gemeinsamen Einstellungen zu speichern, der dem Zeitpunkt entspricht, an dem Sie die Webdienste aufgerufen haben. Jetzt, wenn der Benutzer (entweder durch HOME oder BACK-Taste) verlassen und wiederkommen, können Sie die Zeit überprüfen und mit der gespeicherten Zeit vergleichen. Wenn der Unterschied groß ist, rufen Sie einfach den Webservice auf. Damit dies funktioniert, müssen Sie onStart oder onRestart verwenden.

    
havexz 05.12.2011 19:00
quelle
1

Da dies ein normales Verhalten ist (siehe Ссылка ) würde ich empfehlen, dies nicht zu versuchen arbeiten dagegen, sondern arbeiten mit den Lifecycle-Methoden.

Ihre App wird von außen fokussiert, egal ob von dieser anderen Aktivität oder anderweitig.

Vielleicht sollten Sie die Dienste in onCreate ?

aufrufen     
Craigy 05.12.2011 18:55
quelle

Tags und Links