我正在尝试在片段中实现 UI,用户可以在其中进行各种更新,当用户退出屏幕时,我需要将其发送到后端。(批量更新)
我正在使用 MVVM 模式,其中网络调用是从 viewmodel 执行的。现在,viewModelScope.launch
在这里不起作用,因为一旦用户退出,协程就会被取消onCleared()
。现在,我添加了 GlobalScope 并且它有效,但我也遇到了这个和这个问题
是否有任何其他替代方案可以使用协程完成此任务?
协程主要推荐用于应该立即开始的工作,并且范围仅限于 Fragment、Activity、ViewModel 或任何其他具有生命周期的对象的生命周期。由于其余的协程构建器都与范围相关联,因此它们不会完成您尝试做的事情,因为用户可能会在任何给定时间离开您的应用程序。
更好的方法是将WorkManager与CoroutineWorker一起使用,它与您的 UI 或应用程序生命周期无关,并且仍然具有使用 Coroutines 的优势。使用WorkManager
,当用户离开您指定的屏幕时,您的工作可能会被排入队列,并且一旦您指定的约束得到满足(例如有互联网连接),您的工作就会保证运行。如果您仍在决定使用哪种解决方案,我建议您查看Android 的后台处理指南。