В настоящее время я изучаю сопрограммы. В onCreate
моего Application
класса я сделал следующее:
override fun onCreate() {
super.onCreate()
val job = CoroutineScope(IO).launch {
while(true) {
Timber.i("hello from coroutine")
delay(1000)
}
}
job.invokeOnCompletion {
Timber.i("job.invokeOnCompletion")
}
}
Я ожидал, что задание будет отменено после завершения onCreate
, но вместо этого оно выполняется бесконечно:
2020-06-28 16:23:11.436 onCreate$job: hello from coroutine
[..]
2020-06-28 16:23:19.489 onCreate$job: hello from coroutine
2020-06-28 16:23:21.504 onCreate$job: hello from coroutine
2020-06-28 16:23:22.512 onCreate$job: hello from coroutine
2020-06-28 16:23:23.516 onCreate$job: hello from coroutine
[..]
2020-06-28 16:23:45.671 onCreate$job: hello from coroutine
- Так каков объем
CoroutineScope
? Разве его нельзя отменить, как только будет достигнут конецonCreate
? - Обратите внимание на результат задания: есть разрыв между 16:23: 19 .489 и 16:23: 21 .504 em>, отсутствует 16:23: 20. Кто-нибудь может объяснить почему?
- Я несколько раз принудительно выполнял сборку мусора, но результат продолжается. Можно ли ожидать, что
job
будет собираться мусором, поскольку это локальная переменная?
lifecycleScope
, который сделает это за вас. - person EpicPandaForce   schedule 28.06.2020job
- это локальная переменная? - person stefan.at.wpf   schedule 28.06.2020CoroutineScope
просто группа сопрограмм? Область видимости не похожа на область видимости локальной переменной? - person stefan.at.wpf   schedule 28.06.2020