让我说我有闪屏:
@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条答案
按热度按时间9rnv2umw1#
1.您可以使用
LocalLifecycleOwner.current.lifecycleScope
来获取lifecycleAware coroutineScope。1.可以使用ProcessLifecycleOwner
如果你确实需要一些短的后台工作,我推荐使用
viewModelScope
。viewModelScope
有更长的生命周期,因为viewModelScope
不会被取消,即使当娱乐发生。实际上,像您发布的那样注入
CoroutineScope
并不是启动后台作业的正确方法。每次SplashScreen
重新组合时,它都会调用transferScopeRepoistory
。此外,如果让您的Activity重新创建,则任何LocalLifecycleOwner
也会重新创建。(Fragment
,NavBackStackEntry
,Activity
)