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.
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% Gut onCreate
ist deine beste Wette, aber mit einigen Einschränkungen. (Hauptbildschirm hier ist der Bildschirm, der Webservice aufruft)
onCreate
aufgerufen. onCreate
nicht aufgerufen. onCreate
nicht aufgerufen. So weit so gut, hier ist der Haken.
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.
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
?