网上有大量关于将演示者包装成无头片段并将实例设置为真的内容。这可以防止碎片被破坏。但是让我们说演示者处于网络下载的中间并且发生了配置更改。该活动即将被重新创建,但在onCreate调用的中间,演示者获取信息并且没有视图传递给onCreate没有完成(或者还没有开始)。所以演示者有这个数据,它希望更新视图,但还没有视图。这是一个时间问题。
如何解决这样的时间问题?
答案 0 :(得分:2)
这一切都与在演示者中维护数据有关。确保保留演示者实例并将片段引用更新到演示者。
如果你已经在演示者中有数据,只需在片段的恢复时更新它,否则演示者会给出回电。
答案 1 :(得分:1)
Always start long term operations from a service.(或JobScheduler
)
如果您要下载相当大的文件,请使用演示者触发IntentService
(或JobScheduler
Android Marshmallow及更高版本),永远不会AsyncTask
,Thread
或任何会回调到主线程的异步结构。
演示者存活到onPause
,但不存在onDestroy
,因此如果应用程序被操作系统杀死,则无论如何都会丢失对活动/片段的引用。
如果您正在服务中运行下载,您的演示者可以检查该文件是否已存在并正确更新活动/片段。
请记住,被破坏的片段实际上对操作系统有好处,因此请尽早使用/经常持久化网络数据: - )