Спящая служба с contentobserver - PullRequest
1 голос
/ 02 ноября 2011

Я создал службу (S), в которой размещается ContentObserver (C).C отслеживает некоторые данные и регистрирует изменения, внесенные в базу данных (D).

S также имеет таймер, который выгружает содержимое D в файл через определенные интервалы времени.

У меня на телефоне запущена служба, и какое-то время все работает нормально (пару часов или около того).Затем он внезапно прекращает запись изменений, внесенных в данные, и прекращает дамп в файл.Я пытался изменить данные (провоцируя onChange на C) и просматривать информацию в телефоне, чтобы держать устройство в активном состоянии, но ничего не произошло - служба по-прежнему неактивна.S все еще работает, и когда я подключаюсь к своему ноутбуку, я не вижу ошибок в журнале.

Я предполагаю, что служба не работает (не получает среза процессора).Я немного прочитал о пробуждении, но я не хочу заставлять телефон постоянно бодрствовать.().Альтернативой является создание повторного сигнала тревоги, который выполняет работу C каждые T минут (опрос).Мне больше нравится идея с ContentObservers, потому что пользователь может изменять (особенно удалять) данные между обновлениями.С помощью ContentObserver я получу ВСЕ изменения, а не только снимки через определенные промежутки времени.

Любые идеи о том, как я могу запустить свой сервис на регулярной основе?

С наилучшими пожеланиями Frederik

1 Ответ

0 голосов
/ 02 ноября 2011

Вы можете использовать AlarmManager для трансляции ожидающего намерения через заданный интервал.Если вы используете тип RTC_WAKEUP, он даже будет отправлен, если устройство спит.

Intent intent = new Intent("android.intent.action.DO_SOMETHING");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60*60*1000, pendingIntent);

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

...