强制停止会使应用程序的接收器不被调用?

Posted

技术标签:

【中文标题】强制停止会使应用程序的接收器不被调用?【英文标题】:Force stop will make app's receiver not being called? 【发布时间】:2013-06-19 11:56:48 【问题描述】:

我有一个用 XML 声明的服务,它响应 PACKAGE_ADDED 广播意图。 它工作正常,但我刚刚发现如果我强制停止应用程序,接收器将不再收到任何东西。它没有被调用。

这正常吗?我能做些什么?

我需要确保它始终响应。

【问题讨论】:

嗯,我也面临同样的问题。经过多次调试,我终于意识到如果我使用 CleanMaster 杀死应用程序,我的 WifiEnabledReceiver(用于跟踪 Wifi 状态)将永远不会收到任何东西。 如果活动不在前台,请尝试使用服务并安排警报再次运行服务,这将读取接收器。 【参考方案1】:

android 3.1 版以来,应用程序在手动凝视一次之前无法接收广播意图。 在第一次启动之前,应用程序被启动器视为“已停止”。 (http://developer.android.com/about/versions/android-3.1.html 在“停止的应用程序上启动控件”下)。

如果您手动强制停止应用程序,此标志将再次设置,您需要手动重新启动它以使其再次接收事件。

【讨论】:

【参考方案2】:

尝试添加FLAG_INCLUDE_STOPPED_PACKAGES

this FLAG 在你的意图中。

【讨论】:

请提供答案。【参考方案3】:

如果您的接收器是由您的服务动态注册的,那么当他被杀死时,接收器也是。 但是,如果您在 XML 中声明您的接收器,这应该可以工作。 (像往常一样启动接收器)

【讨论】:

在 android 3.1+ 中不再可用。现在在 android 3.1+ 中,当应用程序被强制停止时,应用程序将不会接收广播接收器,即使它们已在清单文件中注册。

以上是关于强制停止会使应用程序的接收器不被调用?的主要内容,如果未能解决你的问题,请参考以下文章

java异常

如何接收应用程序停止或设备关闭时发送的 GCM 推送通知?

主页启动器强制停止后未收到Android AppWidget的按钮单击事件

应用程序随机停止接收按键(CGEventTaps)

java 怎么对一个对象强制垃圾回收

第二个 recv 调用不接收数据,在 C 中停止执行