android - 将协程与 fragment 一起使用的最佳实践是什么?

标签 android android-fragments kotlin kotlin-coroutines

说明 我有带有多个 fragment 的 TabLayout。我想在 fragment 更改/滑动时将 fragment 数据保存到 Room DB 中,并在返回 fragment 时向用户显示数据。

当前使用目前,我正在使用带有 GlobalScope.launch 的协程。保存到一个 fragment 中,它工作正常。

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

最佳答案

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

  1. 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){} 启动它们

  1. It is good practice to use GlobalScope.launch on fragment change?


不,我们强烈建议不要使用 GlobalScope:在 Why not use GlobalScope.launch? 上查看更多信息。

  1. 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/

相关文章:

android - 这里 map 慢,如何关闭3d-建筑物?

java - 使用 org.apache.commons.net.ftp.FTPClient 从 AsyncTask 类登录 FTP 时出错

android - 通过Android后台服务Kotlin轮询在线打印机队列

unit-testing - MockK "io.mockk.MockKException: no answer found for:"错误

callback - 在 kotlin 中,如何模拟包装回调的挂起函数?

Android 应用程序在开发手机上安装和运行良好,但在 Google Play 上显示 "Unfortunately app has stopped"

android - 在 viewpager 中访问相机硬件的两个 fragment

android - ViewPager2 不破坏 fragment

java - 在通知点击时启动 Fragment 而不会丢失状态

Android 谷歌地图在第一次打开时加载然后在第二次打开时崩溃