我已经在我的应用程序中注册了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可能没有注册很长时间,因为临时ContentObserverService关闭时会立即将其注销,并且服务会立即关闭。从内存消耗的角度来看,这很好,但是对于您的目标而言可能并不那么有效。

或者,可能是因为您正在注册Service并关闭了ContentObserver而没有取消注册Service却在泄漏内存。这太可怕了,因为ContentObserver唯一可以清除的方法是Android终止进程。此外,它将在需要时执行此操作,因为就线程而言,尽管您泄漏了线程和ContentObserverContentObserver,但就其而言,您不再使用该进程。这样最多将导致代码不可靠。

关于android - 如何通过Boot_completed接收器通知您(未启动)的应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2052629/

10-10 01:57