Загрузка данных: каждый раз или один раз? - PullRequest
0 голосов
/ 08 февраля 2012

Я создаю это приложение для Android, которое работает на данных, сгенерированных сервером.Эти данные могут меняться один раз в день, но они также могут меняться каждые 5 минут, и это непредсказуемо.У меня возникает пара вариантов:

  • Поэтому, чтобы быть в безопасности, я могу просто загружать данные каждый раз, когда мне нужно показать их пользователю, но это приводит к длительному времени ожидания и высокойиспользование данных.
  • Таким образом, я мог бы, скажем, загрузить данные один раз и сделать вывод, что через час данные устарели и загрузить снова.Но это может привести к неверным данным.
  • Тогда я мог бы сохранить на сервере очень маленький файл, который указывает только номер версии данных.Пусть клиент сравнивает это значение со значением, которое он загружал в последний раз, и решает, нужно ли ему скачивать.Я не уверен, сэкономит ли это какое-то время и / или пропускную способность.
  • Затем я прочитал немного о системе PUSH, реализованной Android: AC2DM.Подходит ли это для моей проблемы?Для некоторых данных пользователь не должен быть уведомлен;на самом деле, возможно, пользователю никогда не нужно это видеть.Затем для некоторых данных пользователь хочет получить уведомление как можно скорее, поэтому PUSH пригодится.

Отправляемые данные имеют тот же порядок величины, что и в этом примере, но также могутдолжно быть не более 10 строк:

<myapp status_code="200">
<match>
<match_id>12</match_id>
<home_team_id>1</home_team_id>
<home_team>ADO Den Haag</home_team>
<away_team_id>3</away_team_id>
<away_team>AZ</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-08 19:00:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>13</match_id>
<home_team_id>7</home_team_id>
<home_team>FC Twente</home_team>
<away_team_id>10</away_team_id>
<away_team>Heracles</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-10 20:00:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>14</match_id>
<home_team_id>3</home_team_id>
<home_team>AZ</home_team>
<away_team_id>5</away_team_id>
<away_team>Excelsior</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-11 18:45:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>15</match_id>
<home_team_id>15</home_team_id>
<home_team>Roda JC</home_team>
<away_team_id>12</away_team_id>
<away_team>NEC</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-11 19:45:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>16</match_id>
<home_team_id>18</home_team_id>
<home_team>VVV Venlo</home_team>
<away_team_id>6</away_team_id>
<away_team>FC Groningen</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-11 19:45:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>17</match_id>
<home_team_id>11</home_team_id>
<home_team>NAC Breda</home_team>
<away_team_id>2</away_team_id>
<away_team>Ajax</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-11 20:45:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>18</match_id>
<home_team_id>8</home_team_id>
<home_team>FC Utrecht</home_team>
<away_team_id>1</away_team_id>
<away_team>ADO Den Haag</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-12 12:30:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>20</match_id>
<home_team_id>13</home_team_id>
<home_team>PSV</home_team>
<away_team_id>4</away_team_id>
<away_team>De Graafschap</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-12 14:30:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>21</match_id>
<home_team_id>14</home_team_id>
<home_team>RKC Waalwijk</home_team>
<away_team_id>16</away_team_id>
<away_team>SC Heerenveen</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-12 14:30:00</datetime>
<comp_id>1</comp_id>
</match>
<match>
<match_id>22</match_id>
<home_team_id>9</home_team_id>
<home_team>Feyenoord</home_team>
<away_team_id>17</away_team_id>
<away_team>Vitesse</away_team>
<home_score>0</home_score>
<away_score>0</away_score>
<datetime>2012-02-12 16:30:00</datetime>
<comp_id>1</comp_id>
</match>
</myapp>

Есть мысли по этому поводу?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Если вы выберете решение push , рабочий процесс будет таким простым:

  • Набор данных на сервере изменился.
  • Инициируйте push-уведомление, чтобы приложение (пользователей) узнало, что оно должно само обновиться.
  • Приложение получает push-уведомление и приступает к загрузке обновленного набора данных.

Это хорошо решает проблему опроса с тем преимуществом, что ваши пользователи почти сразу будут работать с обновленным набором данных.

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

Только несколько вещей, которые вы должны рассмотреть.

0 голосов
/ 09 февраля 2012

У меня была ситуация, очень похожая на эту, и я решил ее следующим образом:

  • Создан сигнал тревоги с помощью AlarmManager (аналогично сервису, но не заряд аккумулятора)
  • Оповещение каждые 5 минут
  • При каждом запуске использовать AsyncTask, чтобы проверить наличие новой версии и загрузить ее, если новее

Проверить, является ли он более новым, решать вам. Я использовал упомянутый вами файловый подход и посмотрел на дату изменения файла.

AsyncTask - это способ реализовать красивую многопоточность в Android, поэтому процесс загрузки и обновления выполняется в фоновом режиме и не влияет на пользовательский интерфейс. Кроме того, вы можете изменить частоту в области «Предпочтения» (если вы ее создадите), чтобы пользователь мог самостоятельно выбирать частоту обновления.

Alarm - хороший класс, который позволяет вам запускать код с заданными интервалами без необходимости запуска службы, которая ничего не делает в 95% случаев, при этом расходуя заряд батареи.

Полезные ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...