У вас гораздо большие проблемы.
хочу прослушать изменения в смс
База данных.
В Android SDK нет "базы данных SMS" или даже поставщика содержимого SMS. Попытка получить доступ к закрытому частному, недокументированному содержимому неприкасаемых приложений SMS будет срываться на некоторых устройствах, сломаться в будущих версиях Android, не будет работать со сторонними приложениями SMS и, как правило, является плохой идеей. *
BroadcastReceiver запускает
временная служба, которая регистрирует
ContentObserver.
Не существует такого понятия, как временный Service
, который регистрирует ContentObserver
.
Возможно, Service
не является временным, поэтому ваш ContentObserver
остается зарегистрированным, а ваш Service
не выключен. Это может произойти, например, если ваш BroadcastReceiver
называется startService()
, а ваш Service
не вызывает stopSelf()
(например, это не IntentService
). Это не здорово, потому что вы сейчас затягиваете процесс. Но если вы можете убедить своих пользователей, что это нормально, что вы связываете процесс, это лучший ответ, и ваша деятельность может просто (повторно) запустить службу при запуске операции, чтобы гарантировать, что ContentObserver
зарегистрирован.
Возможно, ваш ContentObserver
не зарегистрирован долго, потому что временный Service
отменяет его регистрацию сразу же, когда Service
закрывается, а служба сразу же закрывается. Это здорово с точки зрения потребления памяти, но, вероятно, не так эффективно для ваших целей.
Или, возможно, у вас утечка памяти, потому что вы регистрируете ContentObserver
и выключаете Service
без отмены регистрации ContentObserver
. Это ужасно, потому что единственный способ очистить ContentObserver
- это если Android завершит процесс. Более того, он будет делать это всякий раз, когда ему захочется, потому что, насколько это возможно, вы больше не используете процесс, несмотря на поток и ContentObserver
и Service
, которые вы пропустили. Это в лучшем случае приведет к ненадежному коду.