В приложении, над которым я работаю, у меня есть 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
, но если вы хотите посмотреть, дайте мне знать.Спасибо.