2016-07-06 4 views
0

Kürzlich habe ich versucht, meine Android App besser mit Caching-Daten vom Server zu machen. Nach ein wenig Recherche entschied ich mich für das Loader Pattern, da es viele Situationen für mich erledigt.Loader auf Fragmenten auf dem BackStack nicht beibehalten

Mit com.android.support:appcompat-v7:23.4.0

ich die Lader zu bekommen haben es geschafft, um die Antwort zu speichern, wenn das Gerät oder gedreht wird, wenn die Einzelteile wieder angezeigt, wenn eine Sicherungskopie der Rückseite Stapel durchquert.

Das Problem ist, wenn ich ein paar Fragmente auf dem Back Stack des Aktivitätsfragment-Managers platziere, das Gerät rotiere und dann den Backstack wieder hochfährt.

Diese neu angezeigten Fragmente Loader werden neu erstellt, anstatt den Loader vom ersten Mal an zu verwenden, als sie angezeigt wurden. Hier

ist die Ausgabe von LoaderManager.enableDebugLogging(true);:

V/LoaderManager: initLoader in LoaderManager{8ddafd2 in HostCallbacks{6208a3}}: args=null 
V/LoaderManager: Created new loader LoaderInfo{97187a0 #0 : DemoAppLoader{269af59}} 
V/LoaderManager: Starting in LoaderManager{8ddafd2 in HostCallbacks{6208a3}} 
V/LoaderManager: Starting: LoaderInfo{97187a0 #0 : DemoAppLoader{269af59}} 
D/DemoApp: MainActivity: -> http://jsonplaceholder.typicode.com/posts {"body":"Post 0: 
D/DemoApp: MainActivity: <- http://jsonplaceholder.typicode.com/posts { 
          "body": "Post 0: Nothing here!", 
          "title": "Fake 0", 
          "user_id": 0, 
          "id": 101 
         } 
V/LoaderManager: onLoadComplete: LoaderInfo{97187a0 #0 : DemoAppLoader{269af59}} 
V/LoaderManager: onLoadFinished in DemoAppLoader{269af59 id=0}: Response{fde91b} 
E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f75650179a0 
V/LoaderManager: Stopping in LoaderManager{8ddafd2 in HostCallbacks{6208a3}} 
V/LoaderManager: Stopping: LoaderInfo{97187a0 #0 : DemoAppLoader{269af59}} 
V/LoaderManager: initLoader in LoaderManager{3e8cbf6 in HostCallbacks{6208a3}}: args=null 
V/LoaderManager: Created new loader LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
V/LoaderManager: Starting in LoaderManager{3e8cbf6 in HostCallbacks{6208a3}} 
V/LoaderManager: Starting: LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
D/DemoApp: MainActivity: -> http://jsonplaceholder.typicode.com/posts {"body":"Post 1: 
D/DemoApp: MainActivity: <- http://jsonplaceholder.typicode.com/posts { 
          "body": "Post 1: Nothing here!", 
          "title": "Fake 1", 
          "user_id": 0, 
          "id": 101 
         } 
V/LoaderManager: onLoadComplete: LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
V/LoaderManager: onLoadFinished in DemoAppLoader{6b5ba64 id=1}: Response{1cdb182} 
E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f7565017a10 
V/LoaderManager: Retaining in LoaderManager{3e8cbf6 in HostCallbacks{6208a3}} 
V/LoaderManager: Retaining: LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
V/LoaderManager: Destroying Active in LoaderManager{8ddafd2 in HostCallbacks{6208a3}} 
V/LoaderManager: Destroying: LoaderInfo{97187a0 #0 : DemoAppLoader{269af59}} 
V/LoaderManager: Reseting: LoaderInfo{97187a0 #0 : DemoAppLoader{269af59}} 
V/LoaderManager: Destroying Inactive in LoaderManager{8ddafd2 in HostCallbacks{6208a3}} 
V/LoaderManager: Destroying Active in LoaderManager{8ddafd2 in HostCallbacks{6208a3}} 
V/LoaderManager: Destroying Inactive in LoaderManager{8ddafd2 in HostCallbacks{6208a3}} 
V/LoaderManager: Destroying Inactive in LoaderManager{3e8cbf6 in HostCallbacks{6208a3}} 
E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f7565017930 
V/LoaderManager: initLoader in LoaderManager{3e8cbf6 in HostCallbacks{5abbb3d}}: args=null 
V/LoaderManager: Re-using existing loader LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
V/LoaderManager: Starting in LoaderManager{3e8cbf6 in HostCallbacks{5abbb3d}} 
V/LoaderManager: onLoadFinished in DemoAppLoader{6b5ba64 id=1}: Response{1cdb182} 
V/LoaderManager: Finished Retaining in LoaderManager{3e8cbf6 in HostCallbacks{5abbb3d}} 
V/LoaderManager: Finished Retaining: LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
V/LoaderManager: onLoadFinished in DemoAppLoader{6b5ba64 id=1}: Response{1cdb182} 
E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f7565017cb0 
E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f7565017460 
V/LoaderManager: Stopping in LoaderManager{3e8cbf6 in HostCallbacks{5abbb3d}} 
V/LoaderManager: Stopping: LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
V/LoaderManager: Destroying Active in LoaderManager{3e8cbf6 in HostCallbacks{5abbb3d}} 
V/LoaderManager: Destroying: LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
V/LoaderManager: Reseting: LoaderInfo{e87fbf7 #1 : DemoAppLoader{6b5ba64}} 
V/LoaderManager: Destroying Inactive in LoaderManager{3e8cbf6 in HostCallbacks{5abbb3d}} 
V/LoaderManager: Destroying Active in LoaderManager{3e8cbf6 in HostCallbacks{5abbb3d}} 
V/LoaderManager: Destroying Inactive in LoaderManager{3e8cbf6 in HostCallbacks{5abbb3d}} 
V/LoaderManager: initLoader in LoaderManager{b5dd22c in HostCallbacks{5abbb3d}}: args=null 
V/LoaderManager: Created new loader LoaderInfo{70414f5 #0 : DemoAppLoader{59dc28a}} 
V/LoaderManager: Starting in LoaderManager{b5dd22c in HostCallbacks{5abbb3d}} 
V/LoaderManager: Starting: LoaderInfo{70414f5 #0 : DemoAppLoader{59dc28a}} 
D/DemoApp: MainActivity: -> http://jsonplaceholder.typicode.com/posts {"body":"Post 0: 
D/DemoApp: MainActivity: <- http://jsonplaceholder.typicode.com/posts { 
          "body": "Post 0: Nothing here!", 
          "title": "Fake 0", 
          "user_id": 0, 
          "id": 101 
         } 
V/LoaderManager: onLoadComplete: LoaderInfo{70414f5 #0 : DemoAppLoader{59dc28a}} 
V/LoaderManager: onLoadFinished 
+0

Haben Sie es mit der Supportbibliothek 24.0.0 versucht? Viele Probleme mit Fragmenten wie [dieses] (https://code.google.com/p/android/issues/detail?id=200927) wurden in dieser Version behoben. – ianhanniballake

+0

Die Aktualisierung auf 24.0.0 hat das Problem behoben, das ich hatte . Leider muss ich das Projekt auch auf JDK 8 updaten, was ein bisschen extrem ist, aber ich denke, es lohnt sich. Wenn du das als Lösung darstellen willst, werde ich es ablehnen. –

+0

Ja, das Kompilieren mit API 24 (eine Voraussetzung für die Verwendung der v24 Support Library) erfordert Java 8. – ianhanniballake

Antwort

Verwandte Themen