Как лучше всего использовать сопрограмму с фрагментом? - PullRequest
3 голосов
/ 25 апреля 2020

Описание
У меня есть TabLayout с несколькими фрагментами. Я хочу сохранить данные фрагмента в Room DB при смене фрагмента / смахивании и отобразить данные пользователю, когда он вернется к фрагменту.

В настоящее время используется
В настоящее время я использую сопрограмму с GlobalScope.launch для сохранения во фрагмент, и он работает нормально.

Вопросы
1. Как лучше использовать сопрограмму с фрагментами для сохранения данных в БД по фрагменту изменение?
2. Это хорошая практика, чтобы использовать GlobalScope.launch при смене фрагмента?
3. если GlobalScope.launch не годится для использования, то что мы можем использовать вместо него?

1 Ответ

2 голосов
/ 25 апреля 2020

Лучший способ использовать сопрограмму в любом месте - это использовать структурированный параллелизм для управления всем жизненным циклом. GlobalScope не реализует структурированный параллелизм.

  1. Как лучше всего использовать сопрограмму с фрагментами для сохранения данных в БД при изменении фрагмента?

Вы можете использовать LifecycleScope , предоставленный android.

Внутри фрагмента вы можете запустить сопрограмму с viewLifecycleOwner.lifecycleScope.launch{}, и если вам нужна какая-то операция, которую не следует отменять, запустите их используя viewLifecycleOwner.lifecycleScope.launch(NonCancellable){}

Рекомендуется ли использовать GlobalScope.launch при изменении фрагмента?

Нет, GlobalScope крайне не рекомендуется использовать: см. Подробнее на Почему бы не использовать GlobalScope.launch ?

если GlobalScope.launch не подходит для использования, то что мы можем использовать вместо него?

Вы можете использовать lifeCycleScope, как упомянуто @ ianhanniballake.

...