【发布时间】:2011-08-23 19:20:14
【问题描述】:
使用 android-support-v4.jar 和 FragmentActivity(此时没有 Fragment)
我有一个 AsyncTaskLoader,我开始加载它,然后在后台线程仍在运行时更改方向。在我的日志中,我看到响应来自后台请求。响应完成,我希望 onLoadFinished() 被调用,但它永远不会。
作为一种故障排除方法,在 Manifest 中,如果我设置 android:configChanges="orientation" onLoadFinished() 会按预期调用。
我的 Activity 实现了加载器回调。在 LoaderManager.initLoader() 的源代码中,我看到如果加载器已经存在,则新的回调设置为 LoaderInfo 内部对象类,但我看不到再次调用 Loader.registerListener() 的位置。 registerListener 似乎只在调用 LoaderManagerImpl.createAndInstallLoader() 时被调用。
我怀疑由于 Activity 在方向更改时被销毁并重新创建,并且由于它是回调的侦听器,因此新的 Activity 未注册以得到通知。
谁能确认我的理解以及在方向更改后调用 onLoadFinished 的解决方案是什么?
【问题讨论】:
-
作为另一个故障排除步骤,我添加了一个无 UI 的工作片段并将 setRetainInstance 设置为 true。 Fragment 实现了 LoaderCallbacks。 Fragment 在方向变化之间保留,但它的 onLoadFinished() 在方向变化后永远不会被调用。
-
你在哪里打电话
initLoader()?确保它位于onCreate()。顺便说一句,您可以使用LoaderManager.enableDebugLogging(true)获取有关加载程序生命周期的一些调试信息(在 logcat 中)。
标签: android