2016-07-06 59 views
0

最近,我一直试图通过从服务器缓存数据来使我的Android应用程序更好。经过一些研究后,我决定采用Loader模式,因为它为我处理了很多情况。BackStack上的碎片上的加载程序未保留

使用com.android.support:appcompat-v7:23.4.0

我设法拿到装载机保存响应当设备旋转或穿越回了返回堆栈时的项目时重新显示。

问题是,当我在活动片段管理器的Back Stack上放置一些片段时,旋转设备,然后开始备份Back Stack。

这些重新显示的片段的加载程序被重新创建,而不是从第一次显示的时候使用加载程序。

这里是从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

您是否使用24.0.0支持库进行过试用?许多片段问题,例如[this one](https://code.google.com/p/android/issues/detail?id=200927)在该版本中修复了 – ianhanniballake

+0

更新至24.0.0确实解决了我遇到的问题。不幸的是,它要求我也将该项目更新到JDK 8,这有点极端,但我想这是值得的。如果你想实际上将其作为解决方案,我会除外。 –

+0

是的,编译API 24(使用v24支持库的要求)需要Java 8。 – ianhanniballake

回答