为啥当主应用停止时我的小部件广播接收器服务停止

Posted

技术标签:

【中文标题】为啥当主应用停止时我的小部件广播接收器服务停止【英文标题】:why my widget broadcast receiver service stops when the main app stops为什么当主应用停止时我的小部件广播接收器服务停止 【发布时间】:2018-11-18 04:16:52 【问题描述】:

我有一个实现特定广播接收器服务的小部件,以检测 wifi 连接何时断开。

无论主要活动是否正在运行,它都能完美运行。

我遇到的问题是,当我停止主要活动时,广播接收器服务停止,因为我不再检测到 wifi 变化。

有没有一种方法可以在主要活动中幸存下来启动服务?

如果没有,还有其他机制吗?

【问题讨论】:

使您的广播接收器/服务处于其他进程中(使用android:process)。 我还没有想到这种方法。它使解决方案更加复杂。有趣的是,BR 和警报管理器在主要活动的退出中幸存下来,但例如共享首选项却没有。感谢您的回复! 我不明白你的问题。如果您在 manifest 文件中定义广播接收器。即使您的应用程序关闭,它也会被调用。然后你需要一个简单的if statement 来检查你是否有连接。为什么需要服务? 直到奥利奥都是如此。 O 停止 BR。我找到了一个解决方法:在警报管理器中启动的 BR 并没有在 O 中停止。所以我启动了一个具有高重复间隔的 AM。 @narb,如果您为您的接收器制定了一些待处理的意图并通过警报管理器安排它,那么您的活动是关闭还是打开都没有关系......即使在 API Oreo 上也是如此. 【参考方案1】:

可能您需要在清单中注册您的接收器并将其标记为exported=true,以便在应用程序未运行时它可以工作。查看此链接以获取详细信息,请https://developer.android.com/guide/components/broadcasts

【讨论】:

我认为这不是重点。导出用于接收或不接收来自应用程序外部来源的广播。 @Nazariy Moshenskiy exports=true 如果您没有覆盖它,默认情况下在组件中,哈哈 @HeyAlex 不,它并不总是错误的。阅读此developer.android.com/guide/topics/manifest/… 但在他的情况下你是对的。 哦,是的,是我的错,但是如果导出为false仍然没有问题,因为当您为警报管理器安排意图时,您应该为此目的使用PendingIntent,这意味着意图将拥有所有午餐接收器的权限。 @HeyAlex 好的,谢谢你的信息。我需要阅读更多相关信息【参考方案2】:

为什么我被否决了?

我找到了一种解决方法:在警报管理器中启动的广播接收器在 O 中没有停止(当主要活动停止时)。所以我启动了一个具有高重复间隔的 AM。

【讨论】:

你被否决了,因为你的答案是错误的

以上是关于为啥当主应用停止时我的小部件广播接收器服务停止的主要内容,如果未能解决你的问题,请参考以下文章

Android:更改联系人时,带有广播接收器的前台服务停止工作

为啥动态注册的BroadCastReceiver在其进程死亡后无法接收广播?

应用程序被杀后,广播接收器未调用服务

从最近删除应用程序时后台服务停止

应用程序关闭后,用于媒体控件的 Android 广播接收器停止工作

android的停止后台服务