Как часто получать данные с сервера?

У меня есть фрагмент, и отображаемые данные получены из сетевого вызова. Я использую onSaveInstanceState, чтобы избежать повторной выборки данных при изменении ориентации, но если я правильно понимаю жизненный цикл фрагментов, если приложение никогда не уничтожается (либо явно пользователем, либо потому, что ОС Android убивает активность из-за недостаток ресурсов) данные с сервера никогда не обновятся. Если я правильно понял эту часть, мне нужно было бы определить какой-то способ периодического извлечения данных с сервера или есть другой способ?

1
0
72
2

Ответы 2

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

А как насчет паттерна потянуть, чтобы обновить?

Но я прав, что данные будут обновляться только при перезапуске приложения, как я описываю?

Jim 20.08.2018 17:13

Это зависит от того, где вы выполняете свой сетевой вызов: в onResume () вызов будет выполняться каждый раз, когда отображается фрагмент / действие; в onCreate () каждый раз, когда он создается

Bruno 20.08.2018 17:15

Но если я сделаю это onResume, то не будет ли он срабатывать при каждом изменении ориентации?

Jim 20.08.2018 17:18

да, его бы уволили. Используйте вместо onCreate() с savedInstanceState

Bruno 20.08.2018 17:27

Но разве у меня не будет такой же проблемы? Обновлять только при каждом перезапуске приложения?

Jim 20.08.2018 17:35

Каждый раз, когда создается ваш фрагмент / активность.

Bruno 20.08.2018 17:38

Не могли бы вы подробнее рассказать об этом в своем ответе?

Jim 20.08.2018 19:42

Одно приложение может содержать одно или несколько действий. Одно действие может содержать один или несколько фрагментов. Когда вы впервые отображаете ActivityA, вызывается метод onCreate(). Если вы запустите другой ActivityB, а затем вернетесь к ActivityA, будет вызываться не onCreate(), а onResume(). Это для случая «возврата назад». Для перезапуска приложения ваши данные будут извлечены только в том случае, если будет создано соответствующее действие. Вот почему я отличаю «перезапуск приложения» от «создания активности».

Bruno 21.08.2018 09:15

Так в основном onCreate() запрашиваю данные с сервера и на onResume использую кешированные данные? В этом случае onSaveInstance не имеет значения, поскольку сохраненный пакет доступен только для onCreate.

Jim 21.08.2018 23:13

Я правильно понял? Тогда, когда действие будет воссоздано, оно будет извлекать данные? Что произойдет, если: 1) Пользователь вернется с активности 2) Активность будет убита в фоновом режиме, верно?

Jim 22.08.2018 18:56

Я бы использовал компоненты архитектуры Android ViewModel и LiveData, чтобы сохранять данные во время поворота экрана, предотвращая множественные обращения к серверу для изменения поворота экрана. Это предпочтительный метод, который Google предлагает своим разработчикам https://developer.android.com/topic/libraries/architecture/saving-states

Чтобы данные не устаревали, я бы либо позволил пользователю решить, когда обновлять, используя «Потяните для обновления» (как описано в другом ответе), либо добавил таймер для обновления, если фрагмент находился на переднем плане в течение длительного периода. времени, используя метод, описанный здесь: https://guides.codepath.com/android/Repeating-Periodic-Tasks

У вас есть пример кода для add a timer to update if the fragment has been in the foreground....?

Jim 20.08.2018 19:43

Я отредактировал свой ответ, включив в него пример периодических обновлений.

Aaron Thompson 21.08.2018 10:21

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