6

Vom developer guide on Loaders,Wenn eine Aktivität aufgrund einer Konfigurationsänderung zerstört wird, werden ihre Loader ebenfalls zerstört?

Sie wieder automatisch auf den letzten Cursor des Laders wenn nach einer Konfigurationsänderung neu erstellt werden. Daher müssen sie ihre Daten nicht erneut abfragen.

Von diesen blog post on Loaders,

, wenn eine Aktivität zerstört wird, weist die Aktivität seinen LoaderManager seine Lader zu zerstören und schließen (sowie alle mit ihnen verbundenen Ressourcen, wie zum Beispiel eines Cursor).

Die Frage ist, welche ist richtig? Wenn eine Aktivität aufgrund einer Konfigurationsänderung zerstört wird, was passiert mit (1) ihren Loadern (2) den Ressourcen, die ihren Loadern zugeordnet sind, wie beispielsweise Cursor.

+2

Konfigurationsänderungen werden ein wenig anders gehandhabt als die Zerstörung im Hintergrund oder Backstack. Zum Beispiel können Fragment-Instanzen über Konfigurationsänderungen hinweg beibehalten werden, nicht jedoch über andere Arten der Zerstörung. Diese Diskrepanz könnte in etwa so sein, aber ich kenne die Details nicht, weshalb dies ein Kommentar statt einer Antwort ist. –

+0

@KevinKrumwiede würde ich Server gut als Antwort obwohl. Aber um das hinzuzufügen, Aktivitäten, die keine Ressourcen oder blanke Aktivitäten enthalten, werden sofort beendet, ich meine ihre onDestroy() heißt ziemlich schnell, aber eine viel mehr geladene Aktivität braucht Zeit, um onDestroy() aufzurufen .. – Elltz

Antwort

0

Wie in this blog post about loaders erwähnt, ruft sie ausdrücklich darauf hin, dass:

Der beste Teil über Lader ist, dass Lader Konfigurationsänderungen überleben.

Sie werden bemerken, dass eine Aktivität ist nicht auf Konfigurationsänderungen zerstört - wie in this picture gesehen: Activity lifecycle

onDestroy() wird nur aufgerufen, wenn die Aktivität Veredelung wird oder durch das System zerstört wird (dh your process dies).

+0

Was ist mit 'Activity.onDestroy()'? Ruft es Callbacks eines Loaders auf? Soweit ich getestet habe, wenn ich die Zurück-Taste drücke, wird "Loader.onReset" aufgerufen, aber wenn ich eine App aus den Recents wische, wird sie nicht aufgerufen. In diesem Fall wird nur 'Activity.onDestroy()' aufgerufen. Wie soll ich damit umgehen? Sollte ich 'reset' manuell auf meinem Loader in' Activity.onDestroy() 'aufrufen? –

+0

@ MichałZ.- Fragment'Activity 'onDestroy()' ruft bis zu 'FragmentController.doLoaderDestroy()', auf 'FragmentHostCallback.doLoaderDestroy()' auf 'LoaderManager.doDestroy()' auf 'LoaderInfo.destroy()' auf 'Loader. reset() 'also bin ich nicht sicher, warum das nicht der Fall für dich ist. Haben Sie ein Beispielprojekt, das Sie an einen Fehler unter [b.android.com] (http://b.android.com) anhängen können? – ianhanniballake

+0

danke für deine antwort. Ich werde es ein wenig mehr testen und dann werde ich schließlich ein Problem einreichen. Oder vielleicht geht es darum zu bestellen - vielleicht wird es nach 'onDestroy' benannt, damit ich die Protokolle nicht sehen kann. Irgendeine Idee, wie man es debuggt? –