У меня есть модели просмотра, которые хранятся в списке массивов в классе приложения. Таким образом, их продолжительность жизни продолжается, даже если активность уничтожается из-за вращения (однако, как только значение isFinishing истинно, экземпляр модели представления удаляется из списка и перестает существовать).Что происходит, когда кнопка «Назад» нажата до завершения асинхронного вызова?
У меня также есть сингллеты службы данных, которые используются моделями просмотра, которые также живут бесконечно. Так что, если я начну вызов асинхронной на мой взгляд, модель с использованием асинхронной блок АНКО т.е.
async {
val data = DataService.instance.getData()
uiThread {
if (data != null) {
//do something
}
}
}
Что произойдет, если пользователь нажимает кнопку назад до завершения вызова? IsFinishing будет правдой, и мой экземпляр модели представления больше не будет существовать. Будет ли исключение асинхронного вызова, когда оно вернется или оно умрет грациозно?
так что я предполагаю, что это означает, что асинк {ui {}} всегда должен быть закодирован в активности и/или фрагменте? Будет ли выполняться uiThread, если ротация происходит до вызова? –
Да, используйте uiThread, если результат выполнения async не может быть сохранен независимо от действия/фрагмента. Когда устройство повернуто, активность воссоздается, поэтому код в uiThread не будет выполняться. – davehenry
Обратите внимание, что если вы сделаете это в фрагменте, вам все равно нужно проверить, действительно ли этот фрагмент прикреплен, то есть если 'activity! = Null'. Это связано с тем, что фрагмент можно отсоединить, но не собрать мусор. –