Android MVP - 在无头片段中保留演示者时如何确保在配置更改期间视图获得更新?

时间:2017-05-26 13:08:51

标签: android android-fragments mvp

网上有大量关于将演示者包装成无头片段并将实例设置为真的内容。这可以防止碎片被破坏。但是让我们说演示者处于网络下载的中间并且发生了配置更改。该活动即将被重新创建,但在onCreate调用的中间,演示者获取信息并且没有视图传递给onCreate没有完成(或者还没有开始)。所以演示者有这个数据,它希望更新视图,但还没有视图。这是一个时间问题。

如何解决这样的时间问题?

2 个答案:

答案 0 :(得分:2)

这一切都与在演示者中维护数据有关。确保保留演示者实例并将片段引用更新到演示者。

如果你已经在演示者中有数据,只需在片段的恢复时更新它,否则演示者会给出回电。

答案 1 :(得分:1)

TL; DR

Always start long term operations from a service.(或JobScheduler

描述

如果您要下载相当大的文件,请使用演示者触发IntentService(或JobScheduler Android Marshmallow及更高版本),永远不会AsyncTaskThread或任何会回调到主线程的异步结构。

演示者存活到onPause,但不存在onDestroy,因此如果应用程序被操作系统杀死,则无论如何都会丢失对活动/片段的引用。

如果您正在服务中运行下载,您的演示者可以检查该文件是否已存在并正确更新活动/片段。

请记住,被破坏的片段实际上对操作系统有好处,因此请尽早使用/经常持久化网络数据: - )