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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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