Android GCM是否在后台运行?

Android GCM是否在后台运行?,android,android-intent,service,push-notification,google-cloud-messaging,Android,Android Intent,Service,Push Notification,Google Cloud Messaging,我已经在我的5个应用程序中实现了GCM,但我对GCM在后台的运行仍有疑问,因为应用程序行为的原因,可能对应用程序的前台和后台运行方式有点困惑。安装并注册设备id后,我会在应用程序的“下载”部分的“设置”中看到我的应用程序,并在我的应用程序中按back键 他们不会被列在“跑步”部分。当有消息(通知)时,他们会进入“运行”部分,当通知生成并显示在通知栏中时,他们会从“运行”中清除。然而,如果我点击“下载”部分,我会看到一个“强制停止”按钮被激活(我在大多数应用程序中都看到了这个按钮),这意味着有东西

我已经在我的5个应用程序中实现了GCM,但我对GCM在后台的运行仍有疑问,因为应用程序行为的原因,可能对应用程序的前台和后台运行方式有点困惑。安装并注册设备id后,我会在应用程序的“下载”部分的“设置”中看到我的应用程序,并在我的应用程序中按back键

他们不会被列在“跑步”部分。当有消息(通知)时,他们会进入“运行”部分,当通知生成并显示在通知栏中时,他们会从“运行”中清除。然而,如果我点击“下载”部分,我会看到一个“强制停止”按钮被激活(我在大多数应用程序中都看到了这个按钮),这意味着有东西正在运行


我的问题是,如果我在我的应用程序中使用GCM,当没有活动打开时,我的应用程序是否正在运行并占用手机资源?是否有一项服务在后台运行?如果是,他们为什么没有将其与“正在运行”的所有其他应用一起列出?

这就像询问呼叫应用程序或消息应用程序是否始终在运行,等待电话或短信。有一些Android框架组件叫做BroadCastReceivers。每当收到呼叫、收到消息、检测到低战斗力、触发警报,甚至收到通知时,操作系统都会广播意图消息

然后,我们注册了各种应用程序来接收操作系统触发的一些广播消息。这在应用程序清单中完成(通常)。因此,如果您的应用程序注册为接收GCM消息的广播消息,则您的应用程序将接收该消息

只需移除清单中GCM的广播接收器。您的应用程序将不再响应GCM。接下来,应用程序如何区分单个设备上的多个GCM接收器? 我的意思是如何区分通知GCM是针对应用程序A还是应用程序B


这与您向GCM注册的应用程序ID有关。可以映射到应用程序包名称的。当我们注册GCM时,我们会提供软件包名称,这就像询问呼叫应用程序或消息应用程序是否一直在运行,等待电话或短信。有一些Android框架组件叫做BroadCastReceivers。每当收到呼叫、收到消息、检测到低战斗力、触发警报,甚至收到通知时,操作系统都会广播意图消息

然后,我们注册了各种应用程序来接收操作系统触发的一些广播消息。这在应用程序清单中完成(通常)。因此,如果您的应用程序注册为接收GCM消息的广播消息,则您的应用程序将接收该消息

只需移除清单中GCM的广播接收器。您的应用程序将不再响应GCM。接下来,应用程序如何区分单个设备上的多个GCM接收器? 我的意思是如何区分通知GCM是针对应用程序A还是应用程序B


这与您向GCM注册的应用程序ID有关。可以映射到应用程序包名称的。当我们注册GCM时,我们会提供程序包名称。强制停止应用程序并不意味着在您强制停止应用程序之前它正在运行。这只是一种让用户告诉Android他们不想再次启动应用程序的方式,直到用户再次手动启动

如果您强制停止应用程序,它将无法接收GCM消息,直到用户再次手动启动它,因为GCM后台服务将无法自动启动它

此行为在Android 3.1中引入,包括:

在已停止的应用程序上启动控件

从Android 3.1开始,系统的软件包管理器跟踪处于停止状态的应用程序,并提供一种从后台进程和其他应用程序控制其启动的方法

请注意,应用程序的停止状态与活动的停止状态不同。系统分别管理这两种停止状态

平台定义了两个新的intent标志,让发送方指定是否允许intent激活已停止应用程序中的组件

FLAG_INCLUDE_STOPPED_包-在要解决的潜在目标列表中包括已停止应用程序的意图过滤器

FLAG_EXCLUDE_STOPPED_PACKAGES-从潜在目标的列表>中排除已停止应用程序的意图过滤器

如果在意图中未定义或同时定义这两个标志,则默认行为是在潜在目标列表中包含已停止应用程序的筛选器

请注意,系统向所有广播意图添加标志\u EXCLUDE\u STOPPED\u包。它这样做是为了防止来自后台服务的广播无意或不必要地启动已停止应用程序的组件。后台服务或应用程序可以通过将标志_INCLUDE _STOPPED _PACKAGES标志添加到应允许激活已停止应用程序的广播意图来覆盖此行为

首次安装但尚未启动的应用程序以及用户手动停止的应用程序(在“管理应用程序”中)处于停止状态


GCM有一个在后台运行的进程,但它是一个为设备上的所有应用程序服务的进程,因此安装使用GCM的其他应用程序不会影响后台运行进程的数量。

强制停止应用程序并不意味着它在强制停止前正在运行。这只是一种让用户告诉Android他们不想再次启动应用程序的方式,直到用户再次手动启动

如果您强制停止应用程序,它将无法接收GCM消息,直到用户再次手动启动它,因为GCM后台服务将无法自动启动它

这种行为是在Android 3.1中引入的