2017-08-24 1 views
1

Ich habe eine LocalBroadcastReceiver und ich bin unregistering es in meinem ondestroy().Wird OnDestroy nur aufgerufen, wenn Sie explizit end() aufrufen ?? oder gibt es Ausnahmen?

Jetzt lese ich über ondestroy() in diesen beiden erwähnten SO beantwortet is-ondestroy-not-always-called und why-implement-ondestroy-if-it-is-not-guaranteed-to-be-called und sowie in Androi Docs dass

onDestroy wird aufgerufen, wenn Sie explizit beenden() aufrufen;

Aber warum in meinem Fall habe ich nicht finish() rufe mich aber noch ondestroy() genannt, jedes Mal immer in all meinen Android-Geräten. Auch nach euch, wo sind die Fälle wo ondestroy() nicht abgerufen werden.

Auch wenn Android meine App (aufgrund von weniger Speicher) killt, muss ich mir keine Sorgen machen, da Android meine ganze App umbringt, so dass der Empfänger letztendlich getötet wird. (Also wird es keine geben Speicherleck).

Also für meinen Anwendungsfall welche Fälle dort sind, wo ondestroy() nicht aufgerufen wird.

Antwort

2

Aber warum in meinem Fall ich nicht aufrufen, finish(), aber immer noch ondestroy() wird jedes Mal in allen Android-Geräten aufgerufen.

Die Standardimplementierung von onBackPressed() — was durch die BACK-Taste ausgelöst wird — finish() nennt.

Wo sind die Fälle, in denen ondestroy() nicht aufgerufen werden.

  1. Wenn Sie mit einer nicht behandelten Ausnahme abstürzen

  2. Wenn Ihr Prozess in einer dringenden Art und Weise beendet wird (zB das System benötigt RAM einen eingehenden Anruf zu verarbeiten)

  3. Wenn Der Benutzer klickt auf dem Bildschirm Ihrer App unter "Einstellungen"

  4. auf "Erzwingen Stopp". Auf einigen Geräten, wenn der Benutzer den Prozess mit einem vom Hersteller bereitgestellten Programm beendet Task-Manager

Auch selbst wenn Android wird meine app töten (wegen weniger Speicher) Ich brauche keine Sorgen machen müssen, wie Android wird meine ganze app töten, damit Empfänger schließlich getötet werden erhalten

Ja, weil Ihr gesamter Prozess beendet wird.

+0

Für den ersten Fall, wenn meine App abstürzt, glaube ich nicht, dass ich meinen Empfänger abmelden muss, da die App bereits geschlossen ist und wenn der Nutzer es erneut antippt, wird der Speicher wieder meiner App zugewiesen. –

+0

Für den zweiten Fall ist es das gleiche wie der Fall, den ich über weniger Speicher oder nicht erwähnte? –

+0

@SudhanshuGaur: "Für den ersten Fall ..."- Dies hängt sehr davon ab, wie Ihre App unbehandelte Ausnahmen behandelt." Für den zweiten Fall ... "- Ja, das ist der Teil des Szenarios, den Sie über Android erwähnt haben, der Ihren Prozess wegen zu geringer Speicherbedingungen beendete , Android wird sich die Zeit nehmen, 'onDestroy()' auf Ihren laufenden Aktivitäten aufzurufen. Manchmal wird es nicht, wie es die Zeit nicht dauern kann. – CommonsWare

Verwandte Themen