如何从Boot_completed接收器通知您的(未启动)应用程序?

时间:2010-01-12 21:41:39

标签: android

我已在我的应用程序中注册了BOOT_COMPLETED Receiver,我想收听SMS数据库的更改。

BroadcastReceiver启动一个临时服务,该服务注册ContentObserver。 现在我想通知我的主要活动(未启动)Observer注册成功。 (我想这样做,因为如果用户第一次安装应用程序,他不会重新启动手机,但也需要ContentObserver。如果您有其他想法,可以发布它。我只想要这些信息观察者已经注册了)

我的想法是使用静态属性通知活动:     MyActivity.sObserverRegistered = true

但我认为这不好并且不起作用,因为活动没有开始,这被忽略了。知道如何解决问题吗?

感谢

1 个答案:

答案 0 :(得分:1)

你有比这更大的问题。

  

我想听听短信的变化   数据库中。

Android SDK中没有“SMS数据库”,甚至是SMS内容提供商。尝试访问私有专有的未记录的不被触摸的SMS应用程序内容将在某些设备上中断,将在未来版本的Android中断,将无法与第三方SMS应用程序一起使用,并且通常是一个坏主意。

  

BroadcastReceiver启动了   注册的临时服务   ContentObserver。

没有注册Service的临时ContentObserver

Service可能不是临时的,因此您的ContentObserver仍然已注册且Service未关闭。例如,如果您的BroadcastReceiver调用startService()而您的Service未调用stopSelf()(例如,它不是IntentService),则会发生这种情况。这不是很好,因为你现在正在追平一个过程。但是,如果您可以说服您的用户说您正在捆绑流程,那么这是最好的答案,您的活动可以在活动启动时(重新)启动服务,以确保{{ 1}}已注册。

可能是您的ContentObserver注册时间过长,因为临时ContentObserver会在Service关闭后立即取消注册,并立即关闭服务。从记忆消耗的角度来看,这很好,但它可能对你的目标没那么有效。

或者,可能是您正在泄漏内存,因为您注册了Service并关闭了ContentObserver而未注销Service。这太可怕了,因为ContentObserver将被清除的唯一方法是Android终止进程。此外,它会在感觉到的时候执行此操作,因为就您而言,尽管线程ContentObserverContentObserver已泄露,但您不再使用该过程。这最多会导致代码不可靠。