Намеренный зависимый от 2 вызовов API?

Предположим, у меня есть ситуация, когда ответ API заполняет мою модель Musician информацией, специфичной для этого музыканта. Есть еще один ответ API, который, учитывая имя музыканта, описывает связанных исполнителей.

Я хочу запустить детальное действие, показывающее имя музыканта, участников, жанр, альбомы (ответ API), а также связанных исполнителей (ответ API B).

Асинхронный сетевой вызов обеспечит лучшее взаимодействие с пользователем, но поскольку запуск операции детализации зависит от двух разных вызовов API, есть ли лучшее решение, чем асинхронный вызов API и синхронизация вызова API B (блокирование A и пользовательского интерфейса)?

Если я сделаю оба асинхронных, вызов API B может выполняться во время изменения активности, останавливая его (поскольку асинхронная задача уничтожается при изменении активности). Это приведет к отсутствию данных в подробном действии.

1 ответ

В простом случае:

  1. Начать детализацию
  2. Выполните оба запроса асинхронно, предоставляя пользователю загрузочный UX
  3. После получения обновите пользовательский интерфейс соответственно
    • Вы можете изменить макет Activity в любое время во время выполнения без воссоздания.
    • Вы можете либо обновить пользовательский интерфейс немедленно с помощью "Response A", а затем снова с "Response B" или подождать, пока оба ответа вернутся, а затем обновить UI; первое предпочтительнее.

Сетевые операции никогда не должны блокировать пользовательский интерфейс или пользователя. Отображение загрузочных блесен и тому подобное вполне приемлемо и все время используется в собственных приложениях Google.

Другие вопросы по тегам