假设我有一个闪屏:
@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(检索数据服务器并保存到数据库),我希望应用程序在后台继续运行(通常指当应用程序旋转,组合函数重组并再次进行服务调用时)。在启动屏幕的例子中,生命周期所有者是可组合的功能。如何定义活动(或应用程序)生命周期感知范围,并将其传递到操作发生的存储库。是否存在内存泄漏等缺点?在存储库中应该如何处理协程?
- 您可以使用
LocalLifecycleOwner.current.lifecycleScope
来获取生命周期感知的coroutineScope 你可以使用ProcessLifecycleOwner
如果你确实需要一些简短的后台工作。我建议使用viewModelScope
。viewModelScope
的寿命要长得多,因为viewModelScope
即使在重新创建时也不会被取消。
实际上注入CoroutineScope
像你已经发布的不是一个正确的方式来启动后台工作。每次SplashScreen
重组时,它都会调用transferScopeRepoistory
。此外,如果让您的活动重新创建,那么任何LocalLifecycleOwner
也将重新创建。(Fragment
,NavBackStackEntry
,Activity
)