Size: a a a

2021 June 28

FG

Fuad Garayev in Kotlin Start
дело в том что у меня нет скоупа,я работаю под андроид и каллбек у меня в отдельном классе.Я читал что создавать скоупы вне классов без жизненнных циклов не стоит изза утечек памяти
источник

AN

Alexander Nozik in Kotlin Start
Ну значит надо создать скоуп.

val scope = CoroutineScope(Job())

val callback = Callback{
 scope.launch{ doCoroutines }
}
источник

AN

Alexander Nozik in Kotlin Start
Не говоря о том, что в андроиде насколько я понимаю скоупы есть готовые у приложений
источник

FG

Fuad Garayev in Kotlin Start
готовые скоупы есть только в классах с жизненным циклов. к примеру у активити или фрагмента имеется lifecycleScope.а у меня класс находится в отдельном файле и не имеет готового скоупа
источник

FG

Fuad Garayev in Kotlin Start
есть гарантии что курутиина завершит работу и не будет никаких утечек?
источник

AN

Alexander Nozik in Kotlin Start
В таком виде нет. Если хотите гарантий, то надо к какому-то лайф-циклу привязать. Иначе не понятно, утечки откуда вы считаете
источник

FG

Fuad Garayev in Kotlin Start
понятно.тогда надежда вся на StateFlow. Спасибо за ответ)
источник

AN

Alexander Nozik in Kotlin Start
Так он вас не спасет, для того, чтобы его читать тоже скоуп нужен. Вы сами определитесь, какое время жизни должно быть у ваших задач. Если это активити - привязываете к активити, если это приложение - к приложению. Если нет лайф-цикла, утечек тоже нет, потому что не из чего утекать
источник

FG

Fuad Garayev in Kotlin Start
она должна быть привязана к активити.  У меня длинная цепочка саспенд функций,и в одной из них вызывается класс с каллбэком. Как мне в этот класс передать лайфсайкл скоуп,хотя может какой то Job? а так начальная функция в этой цепочке вызывается в лайфцайкл скоупе активити.
источник

AN

Alexander Nozik in Kotlin Start
Ну значит это должен быть активити скоуп. А передать просто параметром
источник

FG

Fuad Garayev in Kotlin Start
можно передавать скоуп параметром?😳
источник

AN

Alexander Nozik in Kotlin Start
разумеется
источник

FG

Fuad Garayev in Kotlin Start
fun lol(scope: CoroutineScope){        }
что то вроде этого?
источник

AN

Alexander Nozik in Kotlin Start
именно. Или fun CoroutineScope.lol(): Deferred<>, но для таких функций есть соглашение, что они не должны быть suspend
источник

FG

Fuad Garayev in Kotlin Start
прошу прощения,и последний вопрос. на протяжениий всей этой цепочки методов,этот каллбек у меня вызывается как минимум 5-6 раз. Ничего что я каждый раз буду передавать один и тот же скоуп?
источник

AN

Alexander Nozik in Kotlin Start
Да, разумеется
источник

FG

Fuad Garayev in Kotlin Start
пойду тогда пробовать. спасибо
источник

FG

Fuad Garayev in Kotlin Start
попробовал как вы сказали.саспенд функция внутри скоупа в Каллбэке игнорируется.продебажил,получил это.
Failure(kotlinx.coroutines.JobCancellationException: Parent job is Completed; job=StandaloneCoroutine{Completed}@4e0a826)
kotlinx.coroutines.JobCancellationException: Parent job is Completed; job=StandaloneCoroutine{Completed}@4e0a826
источник

AN

Alexander Nozik in Kotlin Start
Ну так родительский скоуп закрылся
источник

FG

Fuad Garayev in Kotlin Start
нужно в лайфскайл скоупе прописать async await что бы дождаться?
источник