2013-07-25 4 views
7

У меня есть служба, которая должна работать в течение длительного времени в фоновом режиме. Из-за уведомления услуга переднего плана не подходит. Он должен бежать спокойно в фоновом режиме, выполняя его опрос. Он делает это уже и ведет себя так, как должен. Это не моя проблема, это всего лишь некоторый фон.Как я могу изящно обрабатывать Android-сервис, убиваемый ОС?

Когда услуга убита пользователем и вызывается onDestroy(), данные сохраняются в db - проблем нет. Также, когда телефон выключен, у меня есть широковещательный приемник, который слушает для отключения/включения. Снова нет проблем с сохранением там.

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

Так что после всего этого, мой вопрос: как я должен изящно очистить свои ресурсы и сохранить мои данные? Есть ли способ запустить код для сохранения моих данных до того, как система убьет мой сервис? Я рассмотрел возможность сохранения моей службы в базе данных с интервалом в несколько минут, чтобы уменьшить объем потери данных. Я не уверен, насколько это хорошо. Запросы, вероятно, будут включать только до 30 строк за 5 минут. Скорее всего, меньше.

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

Спасибо!

+0

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

+0

onDestroy() не вызывается, когда система завершает работу из-за низких ресурсов. @BLaZuRE - Документация, к которой вы привязаны, предназначена для деятельности. Исправьте меня, если я ошибаюсь, но у службы нет метода onPause()? –

ответ

3

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

Если факт, фоновая служба перезапустится, если она вернет Service.START_STICKY_COMPATIBILITY в onStartCommand(), это выбор по умолчанию, и вам не нужно беспокоиться об этом. Просто выполните быструю инициализацию в своем сервисе и сохраните результат как можно скорее.

+0

Так вы предлагаете сохранить мои данные на интервале? Скажите 2 минуты или еще что-то? –

+0

Если вы не можете контролировать изменение данных, просто сохраняйте данные периодически. – faylon

+0

Я могу сэкономить на изменении данных. Я просто не был уверен, что это было плохой практикой, чтобы часто обращаться к базе данных. Но спасибо, я приму свой ответ. –

Смежные вопросы