我已经在我的应用程序中注册了BOOT_COMPLETED接收器,我想收听SMS数据库上的更改。
BroadcastReceiver启动一个临时服务,该服务注册ContentObserver。
现在,我想通知我的主要活动(未启动)观察者已成功注册。
(我想这样做,因为如果用户是首次安装该应用程序,那么他不会重新启动手机,但也需要ContentObserver。如果您有其他想法,可以将其发布。我只想要信息观察者已经注册)
我的想法是使用静态属性通知活动:
MyActivity.sObserverRegistered = true
但是我认为这不好,因此无法正常工作,因为该活动尚未开始,因此被忽略了。知道如何解决问题吗?
谢谢
最佳答案
你有比这更大的问题。
我想听听短信的变化
数据库。
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
唯一可以清除的方法是Android终止进程。此外,它将在需要时执行此操作,因为就线程而言,尽管您泄漏了线程和ContentObserver
和ContentObserver
,但就其而言,您不再使用该进程。这样最多将导致代码不可靠。
关于android - 如何通过Boot_completed接收器通知您(未启动)的应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2052629/