使用android-support-v4.jar和FragmentActivity(此时没有片段)
我有一个AsyncTaskLoader,我开始加载,然后在后台线程仍在运行时更改方向.在我的日志中,我看到响应来自后台请求.响应完成,我希望调用onLoadFinished(),但它永远不会.
作为一种故障排除方法,在Manifest中,如果我设置android:configChanges ="orientation"onLoadFinished()按预期调用.
我的Activity实现了加载器回调.在LoaderManager.initLoader()的源代码中,我看到如果加载器已经存在,则新的回调设置为LoaderInfo内部对象类,但我没有看到再次调用Loader.registerListener()的位置.只有在调用LoaderManagerImpl.createAndInstallLoader()时才会调用registerListener.
我怀疑,由于活动在方向更改时被销毁并重新创建,并且由于它是回调的监听器,因此未注册新活动以通知.
任何人都可以确认我的理解和解决方案,以便在方向改变后调用onLoadFinished?
Dad*_*boy 34
尼古拉发现了这个问题 - 谢谢.
我在onResume()上调用了initLoader.Android文档说明:
"你通常在活动的onCreate()方法中或在片段的onActivityCreated()方法中初始化一个Loader."
阅读"典型"比在处理配置更改生命周期时更加强调.
我将initLoader调用移动到onCreate(),这解决了我的问题.
我认为原因是在FragmentActivity.onCreate()中,从LastNonConfigurationInstance和FragmentActivity.onStart()中提取了LoaderManagers的集合,有一些关于Loaders和LoaderManagers的启动工作.在调用onResume()时,事情已经在进行中.当Loader第一次需要实例化时,从外部onCreate()调用initLoader仍然有效.
| 归档时间: |
|
| 查看次数: |
7535 次 |
| 最近记录: |