Подождите, пока результат Kotlin Coroutines в Java - PullRequest
1 голос
/ 09 октября 2019

Я бы хотел переписать все AsyncTask на Kotlin Coroutines. Звоните и ждите результата от Coroutines в Java коде. Например: у меня есть метод длительного использования в Kotlin.

Kotlin:

class Coroutines {
     suspend fun readFile(): String {
         return GlobalScope.async {
            read long file...
          }.await()
     }
}

Теперь я хотел бы подождать (но не блочный поток пользовательского интерфейса) для полного метода,в идеале без обратных вызовов.

Java:

public class MainActivity extends AppCompatActivity {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        Coroutines c = new Coroutines();
        c.readFile(); //Wait for result but no block UI thread
    }
}

1 Ответ

0 голосов
/ 10 октября 2019

По существу, функция приостановки сопрограммы может быть вызвана только из другой функции приостановки или из компоновщика сопрограмм, например, асинхронного запуска или запуска. Поскольку java не поддерживает сопрограмму, вы не можете запустить ее из кода java.

Но возможно сочетание обоих типов, например, вы можете создать модель представления с живыми данными, которая обновляется из сопрограммы. запустил форму viewModelScope. Результат или прогресс можно наблюдать в упражнении / фрагменте.

Надеюсь, это поможет вам.

...