中方位發生了變化採用Android支持-v4.jar和FragmentActivity(在這一點上沒有任何碎片)如果AsyncTaskLoader運行
我有我開始加載,然後改變方向而一個AsyncTaskLoader LoaderCallbacks.onLoadFinished不叫後臺線程仍在運行。在我的日誌中,我看到響應來自後臺請求。響應完成,我期望onLoadFinished()被調用,但它永遠不會。
作爲故障排除的手段,如果我設置android:configChanges =「orientation」onLoadFinished()按預期調用。
我的活動實現了加載器回調。在LoaderManager.initLoader()的源代碼中,我發現如果加載器已經存在,則新的回調被設置爲LoaderInfo內部對象類,但是我沒有看到Loader.registerListener()再次被調用。當調用LoaderManagerImpl.createAndInstallLoader()時,似乎只調用registerListener。
我懷疑由於活動在方向更改中被銷燬並重新創建,並且因爲它是回調的偵聽器,所以新活動未被註冊以通知。
任何人都可以確認我的理解和解決方案,以便onLoadFinished後方向更改後調用?
作爲另一個故障排除步驟,我添加了一個無UI的工作者Fragment和setRetainInstance爲true。碎片實現LoaderCallbacks。片段在方向更改之間保留,但onLoadFinished()方向更改後永遠不會調用片段。 – Daddyboy
你在哪裏調用'initLoader()'?確保它在'onCreate()'中。順便說一句,你可以使用'LoaderManager.enableDebugLogging(true)'來獲得關於加載器生命週期的一些調試信息(在logcat中)。 –