LoaderCallbacks.onLoadFinished nicht aufgerufen, wenn die Ausrichtung zu ändern passiert während AsyncTaskLoader laufen

Verwenden android-support-v4.jar und FragmentActivity (keine Fragmente an dieser Stelle)

Ich habe eine AsyncTaskLoader die ich starten laden und dann die Ausrichtung ändern, während der hintergrund-thread noch läuft. In meinen logs sehe ich die Antworten kommen durch den hintergrund, Anforderungen. Die Antworten komplett und ich erwarte, dass onLoadFinished() aufgerufen werden, aber das ist es nie.

Als ein Mittel der Problemlösung, in der Manifest-Datei, wenn ich android:configChanges="orientation" onLoadFinished() aufgerufen wird, wie erwartet.

Meine Aktivität implementiert die loader-Rückrufe. In der Quelle für die LoaderManager.initLoader() ich sehe, dass wenn der Lader schon vorhanden ist, wird der neue Rückruf ist auf das LoaderInfo-innere Objekt der Klasse, aber ich sehe nicht, wo Loader.registerListener() erneut aufgerufen wird. registerListener scheint nur aufgerufen werden, wenn LoaderManagerImpl.createAndInstallLoader() aufgerufen wird.

Ich vermute, dass da die Aktivität zerstört wird und neu erzeugt Ausrichtung ändern und da ist es der Hörer, der für Rückrufe, die neue Tätigkeit ist nicht registriert um benachrichtigt zu werden.

Kann das jemand bestätigen mein Verständnis und was die Lösung so, dass onLoadFinished ist genannt nach der Ausrichtung ändern?

  • Als ein weiterer Schritt zur Fehlerbehebung, ich habe eine UI-weniger Arbeiter Fragment und setRetainInstance zu wahren. Das Fragment setzt die LoaderCallbacks. Das Fragment aufbewahrt wird zwischen Orientierung ändert aber seine onLoadFinished() wird niemals aufgerufen, nach Orientierung ändern.
  • Wo ruft Ihr initLoader()? Stellen Sie sicher, dass es in onCreate(). BTW, können Sie LoaderManager.enableDebugLogging(true) um einige debug-Informationen über den loader-Lebenszyklus (im logcat).
InformationsquelleAutor Daddyboy | 2011-08-23
Schreibe einen Kommentar