Может ли область действия сопрограммы пропустить активность / фрагмент? - PullRequest
0 голосов
/ 13 марта 2020

Мне нужно сохранить данные EditText в файл, когда пользователь выходит из действия. Я знаю, что у меня есть много вариантов в зависимости от того, насколько важно сохранить эти данные для меня. Но для этого конкретного случая я в порядке, что я могу позволить себе потерять его, так что лучше всего подойдет лучший вариант.

Мы могли бы создать фоновый сервис, чтобы полностью отделить его от активности хоста. Однако я также думал о создании области сопрограммы, которая могла бы пережить действие (то есть: одноэлементный NonUIScope) и вызывать блок следующим образом:

override fun onSaveInstanceState(bundle: ...) {
    ...
    mInput = et.text.toString()
}

override fun onDestroy() {
    NonUIScope.launch {
         Downloader.saveData(mInput)
    }
}

Для достижения одной и той же цели могут быть несколько разные реализации. Конечно, например, используя onSavedInstanceSate() вместо записи в файл, но моя точка зрения такова: если я использую созданный мной ApplicationScope, могу ли я потенциально утратить активность (даже если в сопрограмме нет ссылки на пользовательский интерфейс) ?

1 Ответ

0 голосов
/ 15 марта 2020

Пока NonUIScope не имеет никакого отношения к вашей активности, а также класс Downloader не содержит экземпляр вашей активности, он не будет пропускать вашу активность.

Например, если вы используете GlobalScope, время жизни запущенной сопрограммы ограничено только временем жизни всего приложения, а не вашей активностью.

...