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

Android MVP - when retaining presenter in headless fragment how to ensure view gets update during config change?

网上有很多关于将演示者包装到无头片段并将 onretaininstance 设置为 true 的内容。这可以防止片段被破坏。但是假设演示者正在进行网络下载并且发生了配置更改。 activity 即将被重新创建,但在 onCreate 调用的中间,演示者获取信息并且没有视图可以传递给 onCreate 未完成(或尚未开始)。所以演示者有这个数据,它想用它来更新视图,但还没有视图。这是一个时间问题。

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

都是关于在presenter中维护数据的。确保您保留了演示者的实例并更新了对演示者的片段引用。

如果您已经在演示者中有数据,只需在片段的简历上更新它,否则演示者会回电。

TL;博士

Always start long term operations from a service. (or a JobScheduler)

描述

如果您正在下载相当大的文件,请使用演示器触发 IntentService (or JobScheduler for Android Marshmallow and later), never AsyncTask, Thread 或任何会回调到主线程的异步结构。

presenter 存活到 onPause,但不会存活到 onDestroy,因此如果应用程序被操作系统终止,对 activity/fragment 的引用无论如何都会丢失。

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

记住被销毁的片段其实对OS是有好处的,所以使用early/often网络数据持久化:-)