将协程与片段一起使用的最佳实践是什么?

Chi*_*uva 6 android android-fragments kotlin kotlin-coroutines

描述
我有包含多个片段的 TabLayout。我想在片段更改/滑动时将片段数据保存到 Room DB 中,并在返回片段时向用户显示数据。

目前正在使用
目前,我正在使用协程GlobalScope.launch来保存到一个片段中,并且它工作正常。

问题
1. 在片段更改时使用带有片段的协程将数据保存到数据库的最佳实践是什么?
2.GlobalScope.launch在片段更改上使用是一个好习惯吗?
3.如果GlobalScope.launch不好用那我们可以用什么代替呢?

Ani*_*ahu 6

在任何地方使用协程的最佳方法是使用结构化并发来管理所有生命周期。GlobalScope 不实现结构化并发。

  1. 在片段更改时使用带有片段的协程将数据保存到数据库的最佳实践是什么?

您可以使用android 提供的LifecycleScope

在片段内,您可以使用 启动协程,viewLifecycleOwner.lifecycleScope.launch{}如果您需要一些不应取消的操作,则使用viewLifecycleOwner.lifecycleScope.launch(NonCancellable){}

  1. 在片段更改时使用 GlobalScope.launch 是一种好习惯吗?

不,强烈建议不要使用 GlobalScope:请参阅为什么不使用 GlobalScope.launch?

  1. 如果 GlobalScope.launch 不好用那么我们可以用什么来代替它?

您可以使用@ianhanniballake 提到的 lifeCycleScope。