你有比这个更大的问题。
我要听的短信 数据库更改。
在Android SDK中没有“短信数据库”,甚至短信内容提供商。试图访问私有专有未公开的未公开的未被记录的短信应用程序内容将在某些设备上中断,未来的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
泄漏了,但您不再使用该过程。这最终会导致不可靠的代码。
谢谢,我会保持业务正常运行,并且活动开始时,然后再用它。它使用stopSelf(),它会导致你提到的问题。 由于“短信内容提供商”的另一点:我搜索了很长时间的解决方案,并没有适当的记录解决方案。但是,这是唯一的解决方案,我知道与URI“content://短信”的ContentProvider。目前它适用于所有设备,但必须留在未来的眼中 – ludwigm 2010-01-12 23:54:49