У меня возник вопрос о том, как обновить представление или выполнить переход фрагмента, когда представление переходит в фоновый режим, а ответ API поступает в виде обратного вызова.
Например, у меня есть loginfragment. Пользователь нажимает кнопку входа в систему, и ведущий берет ее и дает Interactor, где у меня есть наблюдатель Rx, который общается с репозиторием, моделью и так далее. Ответ приходит через 3-5 секунд. В это время я нажимаю кнопку «Домой», и мое приложение переходит в фоновый режим. Докладчик получает ответ от обратного вызова Interactor и теперь хочет обновить представление, но представление находится в фоновом режиме.
При успешном входе в систему я хочу сделать переход фрагмента и перейти к фрагменту B. Но мое представление находится в фоновом режиме. Поэтому, когда я возвращаю свое приложение на передний план, я все еще вижу экран входа в систему, хотя я уже получил ответ API об успешном входе в систему.
Как мне обрабатывать обновления представления или переход фрагмента, когда представление переходит в фоновый режим, и как лучше всего это сделать?
Это для входа в систему... но как насчет других вызовов API? Например, с кодом успеха http 204 (без контента)? Должен ли я сохранять каждый http-ответ локально?
На самом деле, даже не имея контента, вы все равно сможете узнать, удался вызов или нет. Таким образом, цель состоит в том, чтобы сохранить все, что может помочь вам узнать последнее состояние вашего сетевого запроса, чтобы знать, что отображать/изменять в вашем пользовательском интерфейсе, когда вы вернетесь в приложение. Для запроса, отвечающего 204, использование простого логического значения может выполнить задание или поставить действие в очередь для выполнения позже. Это широкий вопрос, на который нужно ответить, так как каждый отдельный запрос будет иметь другой результат.




Одним из подходов является архитектура Model-View-Intent в Мосби, в которой презентатор сохраняет последнее состояние представления, а представление подписывается на ViewState Observable для обновления. При таком подходе представление может подписаться в onStart(), когда безопасно совершать фрагментные транзакции.
Другой возможный подход заключается в том, что каждое представление имеет состояние (ViewState), которое содержит очередь команд для представления. Если представление готово (уже был вызван onStart()), то команда передается ему немедленно, иначе сохраняется в очередь и откладывается до готовности представления. Посмотрите, как это реализовано в Мокси.
Может быть, вы можете сохранить токен локально после входа в систему, чтобы, когда вы переводите приложение на передний план, вы могли проверить, что вы уже прошли аутентификацию, и выполнить переход этого фрагмента.