如何解决考虑到进程死亡后片段返回堆栈的恢复,如何处理应用程序启动时的异步工作
应用启动时,我需要进行一些IO操作,应用才能普遍使用。这可能需要 1 到 20 秒的时间(后者是在应用首次运行时或在某些应用更新后首次运行时)。
我使用单一活动方法(多个片段),并使用 Koin 来处理 DI 和导航组件。
当应用启动时,Activity 会从 Koin 获得 StartupViewModel
并显示一个伴随的片段以指示进度。完成后,导航到 Home 片段。
这一切都很好,除非应用程序从后台恢复(在设备在后台终止进程后)。这里的问题在于,作为恢复过程的一部分,Fragment 会自动添加到后端堆栈(通过 FragmentManager)。因此,例如,HomeFragment.onViewCreated()
在 StartupViewModel 完成其工作之前被调用,因此所需的组件在需要时尚未准备就绪。
处理这个问题的最佳方法是什么?理想情况下,我想告诉 FragmentManager 在我给它完全清除信号之前推迟。
目前,我只有一个讨厌的 hack,需要为每个 Fragment
以及依赖于此类异步加载组件的所有其他生命周期方法完成:
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
val startupModel = get<StartupModel>()
val startupState = startupModel.state
if (startupState !is State.Success) {
lifecycleScope.launch {
startupModel.awaitStartupComplete()
onViewCreated(view,savedInstanceState)
}
return
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。