gpt4 book ai didi

android - 如果在 AsyncTaskLoader 运行期间发生方向更改,则不会调用 LoaderCallbacks.onLoadFinished

转载 作者:IT王子 更新时间:2023-10-28 23:29:29 26 4
gpt4 key购买 nike

使用 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 的解决方案是什么?

最佳答案

Nikolay 发现了问题 - 谢谢。

我从 onResume() 调用 initLoader。 Android 文档指出:

"You typically initialize a Loader within the activity's onCreate() method, or within the fragment's onActivityCreated() method."

在处理配置更改生命周期时,“通常”比我更强调一点。

我将 initLoader 调用移至 onCreate() 并解决了我的问题。

我认为原因是在 FragmentActivity.onCreate() 中,从 LastNonConfigurationInstance 中提取了一组 LoaderManager,而在 FragmentActivity.onStart() 中,有一些关于 Loaders 和 LoaderManagers 的启动工作。在调用 onResume() 时,事情已经在进行中。当 Loader 第一次需要实例化时,从外部调用 initLoader onCreate() 仍然有效。

关于android - 如果在 AsyncTaskLoader 运行期间发生方向更改,则不会调用 LoaderCallbacks.onLoadFinished,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7166363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com