Loader错误地处理配置更改

时间:2018-04-15 18:02:17

标签: android android-activity loader

我有一个app,来自API的fetchnig数据,我使用AsyncTaskLoader更新适配器并使用新数据更新UI。 当旋转设备时,加载器工作正常(数据保持不变)。 当我离开应用程序时出现问题 - 使用“主页按钮”或关闭屏幕并重新打开它。然后,数据适配器和视图将使用新的获取数据自动更新。

我发现当旋转设备时 - 只执行onLoadFinished()方法。 当我关闭/打开屏幕时 - onStartLoading()和loadInBackground()在onLoadFinished()之前执行Loader方法!我无法理解为什么设备旋转和关闭/打开屏幕之间存在这样的差异。我相信Loader在这两种情况下的行为应该相同 - 只应调用onLoadFinished()。

编辑:我成功解决了问题:
1.在AsyncTaskLoader实现中创建全局'缓存变量'
2.在全局'缓存变量'中的deliverResult方法中存储获取的数据
3.在onStartLoading()方法中检查缓存变量,如果它不是空的=> deliverResult(缓存变量)
更多信息: What does AsyncTaskLoader.deliverResult() actually do?

1 个答案:

答案 0 :(得分:0)

是的装载机行为在27.1中发生了变化

Loaders的底层实现已被重写为使用Lifecycle。虽然API保持不变,但有许多行为更改

  • initLoader(),restartLoader()和destroyLoader()现在只能是 呼吁主线程。

    现在调用Loader的onStartLoading()和onStopLoading() 包含FragmentActivity / Fragment的启动和停止, 分别

    onLoadFinished()只会在onStart()和onStop之间调用。如 结果,片段事务现在可以安全地完成 onLoadFinished()。

    现在不推荐使用与Loaders相关的FragmentController方法。

https://developer.android.com/topic/libraries/support-library/revisions

检查其中的重要更改