Лучшее понимание услуг - PullRequest
       13

Лучшее понимание услуг

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

В приложении, над которым я работаю, у меня есть AlarmManager, который запускает Service через указанное время и интервалы.Service использует некоторые данные, которые я отправляю в Intent, для чтения / записи базы данных SQLite, создания Notification и отправки SMS.У меня была проблема, что когда устройство переходит в «глубокий сон», и я снова использую устройство, я получаю усилие, близкое к NullPointerException на Intent в Service.Поскольку я провел некоторое исследование, у меня было несколько вопросов о том, как работает Service, на которые я не смог ответить:

1) Я понял, что былиспользуя устаревший метод onStart для Service.Я собираюсь переключиться на onStartCommand с флагом START_REDELIVER_INTENT (думаю, это было нулевое исключение, которое я получал, потому что Service пытался перезапустить со старым onStart и не получил исходный Intent).У меня такой вопрос: я должен поставить работу, которую Service делает в onStartCommand или в onCreate?Есть ли функциональная разница?

2) Учитывая то, что я делаю в своем Service, достаточно ли этой работы, чтобы вставить свои Thread?

3) Нужно ли конкретно звонить stopSelf?Если да, то где лучше назвать его?

4) Это более двусмысленно: насколько я знаю, я отменил все зарегистрированные тревоги, и после глубокого сна явсе еще получил нулевое исключение для Service.Есть ли какая-либо причина, по которой Service все равно будет запущен, хотя я никогда не запускал его с тревогой?

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

1 Ответ

2 голосов
/ 27 февраля 2012

Вы должны использовать IntentService вместо обычного старого Сервиса. Он выполняет всю свою работу в фоновом потоке и автоматически останавливается, когда у него заканчивается работа.

...