Какую область следует использовать при вызове приостановленной функции из Java Activity? - PullRequest
0 голосов
/ 28 апреля 2020

Я вызываю функцию приостановки из Activity, написанную в Java. Прямо сейчас я использую EmptyCoroutineContext.INSTANCE как возвращение метода getContext() моего Continuation. Это правильно CoroutineContext? приведет ли это к проблемам, если приостановленная функция завершится после того, как моя Activity исчезнет?

Спасибо.

Ответы [ 2 ]

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

Я могу предложить альтернативное решение. Если вы не можете изменить свою активность, вы можете создать делегат в Kotlin, в который вы перегрузите вызов этой функции приостановки. Затем в делегате вы можете получить доступ к lifecycleScope действия и использовать его для вызова.

class MyDelegage(private val lifecycleOwner: LifecycleOwner) {

    fun doWorkAsync() {
        lifecycleOwner.lifecycleScope.launch {
            suspendFunHere()
        }
    }
}

, тогда вы будете создавать экземпляр делегата в вашей активности и передавать this как LifecycleOwner.

0 голосов
/ 28 апреля 2020

Вот что сказано в документации Google об этом:

LifecycleScope определен для каждого объекта Lifecycle. Любая сопрограмма, запущенная в этой области, отменяется при разрушении жизненного цикла. Вы можете получить доступ к CoroutineScope жизненного цикла через свойства lifecycle.coroutineScope или lifecycleOwner.lifecycleScope.

viewLifecycleOwner.lifecycleScope.launch {
        // Your code here
    }

Здесь источник: https://developer.android.com/topic/libraries/architecture/coroutines

...