Wird onPause garantiert aufgerufen, wenn eine Aktivität nicht mehr ausgeführt wird?

8

Ich erstelle einen neuen Thread in einer Aktivität und ich verlasse mich auf onPause () um den Thread zu unterbrechen. Wenn meine App abstürzt oder die Aktivität irgendwie aufhört zu existieren, möchte ich, dass der Thread beendet wird.

Wird Activity / Fragment.onPause () garantiert aufgerufen, wenn eine Aktivität nicht mehr ausgeführt wird? Wenn nicht, wie kann ich garantieren, dass der fragliche Thread getötet wird?

    
oadams 09.05.2013, 09:40
quelle

3 Antworten

11
  

Wenn meine App abstürzt

onPause() wird hier nicht aufgerufen, aber dies sollte Sie nicht stören, da Ihr gesamter App-Prozess nicht mehr existiert, einschließlich aller Threads, die Sie erstellt haben (UI oder anders).

  

Aktivität hört irgendwie auf zu existieren

onPause() wird immer dann aufgerufen, wenn Ihre Aktivität aus dem Vordergrund in den Hintergrund verschoben wird. Dies geschieht in jeder denkbaren Weise, in der Ihre Aktivität heruntergefahren werden kann, mit Ausnahme des Absturzes Ihrer App. Wie ich oben erwähnt habe, wird der Absturz der App standardmäßig auch den Thread beenden.

onPause() wird im Wesentlichen aufgerufen, wenn Ihre Aktivität nicht mehr im Vordergrund steht. Deine Aktivität ist vielleicht noch am Leben und im Speicher, nachdem onPause() aufgerufen wurde, aber es gibt kein Szenario, an das ich denke, in dem deine Aktivität lebt und im Hintergrund, ohne dass onPause() aufgerufen wird.

    
Raghav Sood 09.05.2013, 09:45
quelle
4

Ja, onPause() wird aufgerufen, wenn eine Aktivität nicht mehr ausgeführt wird. Angenommen, eine Aktivität ist geschlossen, dann lautet die Reihenfolge der Ereignisse onPause() - & gt; onStop() - & gt; %Code%. Auch wenn Ihre Aktivität beim Start einer anderen Aktivität oder beim Ausschalten des Bildschirms in den Hintergrund tritt, wird onDestroy() immer aufgerufen, auch wenn die beiden anderen Methoden nicht aufgerufen werden. Selbst wenn die Aktivität aufhört, wird onPause() aufgerufen und Ihr Thread wird getötet.

Aber wenn Ihre App zusammen mit Ihrer gesamten Aktivität abstürzt, wird auch der Thread, den Sie gestartet haben, von Android erledigt, indem Sie alles beenden.

    
user1721904 09.05.2013 09:45
quelle
1

Angenommen, Sie haben zwei Aktivitäten A und B. Sie navigieren von A nach B. Aktivität A geht in den Hintergrund, dh Aktivität A ist pausiert. Aktivität B nimmt Fokus, dh Vordergrund. Wenn Sie auf die Schaltfläche Zurück klicken, wird die Aktivität B aus dem Backstack übernommen und die Aktivität A wird fokussiert, dh die Aktivität A wird fortgesetzt.

Wenn Sie einen Dialog in Aktivität anzeigen, wird die Aktivität in Pause und Dialog beim Klicken auf den Zurück-Button angezeigt und die Aktivität wird fortgesetzt (Vordergrund).

Wenn die Aktivität nicht mehr ausgeführt wird, befindet sie sich im Hintergrund und wird angehalten. Ich stimme Raghav Sood zu, was passiert, wenn die App abstürzt.

Normalerweise sollten Sie den onPause () Callback zu:

verwenden

Stoppt Animationen oder andere laufende Aktionen, die CPU verbrauchen könnten. Nicht gespeicherte Änderungen werden übernommen, jedoch nur, wenn Benutzer erwarten, dass solche Änderungen beim Verlassen dauerhaft gespeichert werden (z. B. als E-Mail-Entwurf). Geben Sie Systemressourcen wie Broadcast-Empfänger für Sensoren (wie GPS) oder Ressourcen frei, die sich auf die Akkulaufzeit auswirken können, während Ihre Aktivität pausiert ist und der Benutzer sie nicht benötigt.

Hinweis:

Mehrere Aufgaben können gleichzeitig im Hintergrund gehalten werden. Wenn der Benutzer jedoch gleichzeitig viele Hintergrundaufgaben ausführt, kann das System Hintergrundaktivitäten zerstören, um Speicher wiederherzustellen, wodurch die Aktivitätsstatus verloren gehen.

    
Raghunandan 09.05.2013 09:53
quelle

Tags und Links