Я работаю над приложением Android с архитектурой MVVM
, с компонентами жизненного цикла, LiveData
и т. Д. На уровне модели / данных приложения используется шаблон репозитория, как предлагается в руководстве Android по архитектуре приложения.
Я использую OkHttp3 WebSockets
для связи с сервером.В настоящее время я не хочу использовать LiveData в репозитории, поэтому вместо этого я использую обратные вызовы, например.
interface Repository {
fun setOnMessageReceivedListener(listener: (Message) -> Unit)
}
Теперь я хочу начать использовать сопрограммы Kotlin для асинхронных задач.Я начал реализовывать их для других REST
запросов, и все работает, как и ожидалось.
Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как преобразовать получение сообщений из сокета для использования сопрограмм.
Должен ли я удалить шаблон прослушивателя и поместить полученное сообщение в цикл обработки событий?например,
interface Repository {
suspend fun receiveMessage(): Message?
}
, а затем в ViewModel
, чтобы сделать
...
someScope {
launch {
while(true) {
val msg = repository.receiveMessage()
if (msg == null) break
else doSomethingWith(msg)
}
}
}
...