Android 如何处理应用程序启动时的异步工作,考虑到进程死亡后碎片回栈的恢复

Android 如何处理应用程序启动时的异步工作,考虑到进程死亡后碎片回栈的恢复,android,android-fragments,android-navigation,koin,Android,Android Fragments,Android Navigation,Koin,当应用程序启动时,我需要在应用程序正常使用之前执行某些IO操作。这可能需要1到20秒(后者是应用程序第一次运行时,或在某些应用程序更新后第一次运行时) 我使用的是单活动方法(多个片段),而Koin用于DI和导航组件 当应用程序启动时,该活动从Koin获得一个StartupViewModel,并显示一个附带的片段以指示进度。完成后,将导航到主片段 这一切都很好,除非应用程序从后台恢复(在设备在后台终止进程后)。这里的问题是,作为恢复过程的一部分,片段会自动添加到后堆栈中(由FragmentMana

当应用程序启动时,我需要在应用程序正常使用之前执行某些IO操作。这可能需要1到20秒(后者是应用程序第一次运行时,或在某些应用程序更新后第一次运行时)

我使用的是单活动方法(多个片段),而Koin用于DI和导航组件

当应用程序启动时,该活动从Koin获得一个
StartupViewModel
,并显示一个附带的片段以指示进度。完成后,将导航到主片段

这一切都很好,除非应用程序从后台恢复(在设备在后台终止进程后)。这里的问题是,作为恢复过程的一部分,片段会自动添加到后堆栈中(由FragmentManager)。因此,例如,
HomeFragment.onViewCreated()
在StartupViewModel完成其工作之前被调用,因此所需的组件在需要时还没有准备好

处理这个问题的最佳方法是什么?理想情况下,我想告诉FragmentManager暂缓,直到我给出一个完全清除的信号

目前,我只需要对每个
片段
以及其他依赖于异步加载组件的生命周期方法进行一次恶意攻击:

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
    }
覆盖已创建的视图(视图:视图,savedInstanceState:Bundle?){
super.onViewCreated(视图,savedInstanceState)
val startupModel=get()
val startupState=startupModel.state
如果(startupState!是State.Success){
生命周期望远镜发射{
startupModel.StartupComplete()
onViewCreated(视图,savedInstanceState)
}
返回
}