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



假设我有一个闪屏:

@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(检索数据服务器并保存到数据库),我希望应用程序在后台继续运行(通常指当应用程序旋转,组合函数重组并再次进行服务调用时)。在启动屏幕的例子中,生命周期所有者是可组合的功能。如何定义活动(或应用程序)生命周期感知范围,并将其传递到操作发生的存储库。是否存在内存泄漏等缺点?在存储库中应该如何处理协程?

  1. 您可以使用LocalLifecycleOwner.current.lifecycleScope来获取生命周期感知的coroutineScope
  2. 你可以使用ProcessLifecycleOwner

如果你确实需要一些简短的后台工作。我建议使用viewModelScopeviewModelScope的寿命要长得多,因为viewModelScope即使在重新创建时也不会被取消。

实际上注入CoroutineScope像你已经发布的不是一个正确的方式来启动后台工作。每次SplashScreen重组时,它都会调用transferScopeRepoistory。此外,如果让您的活动重新创建,那么任何LocalLifecycleOwner也将重新创建。(Fragment,NavBackStackEntry,Activity)

最新更新