Лучшая стратегия для реализации этого поведения в Android-приложении? - PullRequest
2 голосов
/ 02 июля 2010

В моем приложении для Android у меня есть некоторые данные, которые нужно синхронизировать ежедневно, но они также должны обновляться каждый час, когда пользователь находится внутри приложения.

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

Другой вариант - использовать таймер, установленный внутри приложения, и запускать его намерение внутри приложения. Я предполагаю, что все таймеры отменяются, когда приложение убивается, верно? Но мое приложение состоит из нескольких действий, и я хочу, чтобы таймер работал во всех действиях, как мне это сделать? Я не хочу дублировать код - мы уже используем подкласс для Activity и ListActivity.

Ответы [ 2 ]

2 голосов
/ 02 июля 2010

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

Решение кажется простым: отмените второе требование,Немногие приложения используются непрерывно в течение нескольких часов подряд, поскольку люди, как правило, используют свои телефоны Android для других целей (например, для телефонов), поэтому ваш код обновления по часам, если используется все время, вероятно, никогда не будет работать.

Я тоже мог бы использовать почасовую сигнализацию и запускать то же самое намерение, но, поскольку ваше приложение может быть убито в любое время, отменить его было бы невозможно.Ваше приложение не будет убито, пока оно на экране.И хотя он не отображается на экране, вы не хотите, чтобы обновления производились ежечасно.

Я предполагаю, что все таймеры отменяются, когда приложение убивается, верно?

Приложения обычно не "убиты".Мы ожидаем, что вы будете убирать за собой, когда ваши действия будут называться onDestroy().Если вы настроили Timer с потоком демона, вам нужно будет завершить этот поток.

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

Привязывайтесь к вашему служению от каждого из ваших действий.Если он вызван вашей тревогой Intent, попросите его выполнить обычную обработку обновлений.Если он запускается из-за запроса привязки, просто убедитесь, что его почасовая Timer работает.Когда он вызывается с onDestroy() (например, после того, как все действия не связаны), он должен остановить Timer.

0 голосов
/ 02 июля 2010

Возможно, вы сможете запустить таймер в фоновом режиме (который убивает меньше, чем действия), но все еще нет гарантии, что Android тоже не убьет ваш сервис. И если запустить что-то вроде этого, то фон может использовать много батареи.

Как насчет ежечасной синхронизации в фоновом потоке, который создается в onResume? И просто сохраните последний раз, когда пользователь сделал синхронизацию, и если это было> час, просто сделайте синхронизацию. Потому что я не думаю, что есть какая-либо причина для быстрой синхронизации данных, которые пользователь никогда не увидит.

...