说明 我有带有多个 fragment 的 TabLayout。我想在 fragment 更改/滑动时将 fragment 数据保存到 Room DB 中,并在返回 fragment 时向用户显示数据。
当前使用目前,我正在使用带有 GlobalScope.launch
的协程。保存到一个 fragment 中,它工作正常。
问题
1. 使用带有 fragment 的协程在 fragment 更改时将数据保存到数据库的最佳实践是什么?
2. 使用GlobalScope.launch
是一个很好的习惯。关于 fragment 变化?
3.如果GlobalScope.launch
不好用那么我们可以用什么来代替呢?
最佳答案
在任何地方使用协程的最佳方式是使用结构化并发来管理所有生命周期。 GlobalScope 不实现结构化并发。
- What is the best practice to use a coroutine with fragments to save data to DB on fragment change?
您可以使用LifecycleScope安卓提供。
在 fragment 中,您可以使用
viewLifecycleOwner.lifecycleScope.launch{}
启动协程。如果您需要一些不应取消的操作,请使用 viewLifecycleOwner.lifecycleScope.launch(NonCancellable){}
启动它们
- It is good practice to use GlobalScope.launch on fragment change?
不,我们强烈建议不要使用 GlobalScope:在 Why not use GlobalScope.launch? 上查看更多信息。
- if GlobalScope.launch is not good to use then what we can use instead of it?
您可以使用@ianhanniballake 提到的 lifeCycleScope。
关于android - 将协程与 fragment 一起使用的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61420950/