android 如何为可组合功能中的活动或应用程序定义生命周期感知协同程序范围?

vuktfyat  于 2023-04-10  发布在  Android
关注(0)|答案(1)|浏览(115)

让我说我有闪屏:

@Composable
fun SplashScreen(viewModel: SplashViewModel = hiltViewModel()) {
    
    val lifecycleOwner = LocalLifecycleOwner.current
    val externalsomeScope="?"
    viewModel.transferScopeRepoistory(externalsomeScope )
       
}

class MyRepository{
    fun saveToDb(val scope: CoroutineScope,){
     scope.launch{
               //save to Room
         
            }.join()
         }
     }

对于后台的datasycn(检索数据服务器和保存到数据库),我想应用程序继续在后台操作(通常指应用程序旋转、组合功能重新组合并再次进行服务调用时).在闪屏示例中,生命周期所有者是可组合函数。如何定义活动(或应用程序)生命周期感知范围并传递到操作发生的存储库。是否有任何缺点,如内存泄漏等。在存储库中应如何处理协同程序?

9rnv2umw

9rnv2umw1#

1.您可以使用LocalLifecycleOwner.current.lifecycleScope来获取lifecycleAware coroutineScope。
1.可以使用ProcessLifecycleOwner
如果你确实需要一些短的后台工作,我推荐使用viewModelScopeviewModelScope有更长的生命周期,因为viewModelScope不会被取消,即使当娱乐发生。
实际上,像您发布的那样注入CoroutineScope并不是启动后台作业的正确方法。每次SplashScreen重新组合时,它都会调用transferScopeRepoistory。此外,如果让您的Activity重新创建,则任何LocalLifecycleOwner也会重新创建。(FragmentNavBackStackEntryActivity

相关问题