gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:53:21 25 4
gpt4 key购买 nike

我已经在我的应用程序中注册了一个 BOOT_COMPLETED 接收器,我想监听 SMS 数据库的变化。

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

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

但我认为这不好并且不起作用,因为 Activity 尚未开始并且被忽略了。知道如何解决这个问题吗?

谢谢

最佳答案

你的问题比这大得多。

i want to listen for changes on SMS Database.

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

The BroadcastReceiver starts a temporary Service which registers the ContentObserver.

没有注册 ContentObserver 的临时 Service 这样的东西。

Service 可能不是临时的,因此您的 ContentObserver 保持注册状态并且您的 Service 没有关闭。例如,如果您的 BroadcastReceiver 调用了 startService() 而您的 Service 没有调用 stopSelf()(例如,它不是 IntentService)。这不是很好,因为您现在正在绑定(bind)一个进程。但是,如果您可以说服您的用户您正在绑定(bind)一个进程是可以的,那么这是最好的答案,并且您的 Activity 可以在 Activity 启动时(重新)启动服务,以确保 ContentObserver 已注册。

可能是你的ContentObserver注册的时间不长,因为临时的Service会在Service关闭的时候马上注销,服务立即关闭。从内存消耗的角度来看,这很好,但它可能对您的目标没有那么有效。

或者,可能是您正在泄漏内存,因为您注册了 ContentObserver 并关闭了 Service 而没有注销 ContentObserver。这太可怕了,因为唯一清理 ContentObserver 的方法是 Android 终止进程。此外,它会在需要时执行此操作,因为就它而言,您不再使用该进程,尽管线程和 ContentObserverService 您泄露了。这充其量只会导致不可靠的代码。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com