GCM是否在后台运行?

时间:2014-05-15 10:18:12

标签: android android-intent service push-notification google-cloud-messaging

我已经在我的5个应用程序中实现了GCM,但我对应用程序行为背景原因中GCM的运行存在疑问,可能会对应用程序前景和后台运行风格感到困惑。安装后,我看到我的应用程序列在“设置中的应用程序”的“已下载”部分下,并注册了设备ID,然后按我的应用程序中的后退键。

它们未列在“正在运行”部分下。当有消息(通知)时,它们会进入“正在运行”部分,当生成通知并显示在通知栏中时,它们将从“正在运行”中清除。但是,如果我点击“已下载”部分,我会看到一个“强制停止”按钮激活(我在大多数应用程序中看到),这意味着正在运行。

我的问题是,如果我在我的应用中使用GCM,那么我的应用程序正在运行并获取手机资源而没有活动打开?是否有服务在后台运行,如果是,为什么它没有列在“正在运行”中的所有其他应用程序?

2 个答案:

答案 0 :(得分:3)

强制停止某个应用并不意味着它在您强制停止之前它已在运行。这只是一种让用户告诉Android他们不希望再次启动应用的方法,直到用户再次手动启动它。

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

此行为是在Android 3.1中使用Launch Controls

引入的
  

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

     

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

     

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

     

平台定义了两个新的意图标志,让发件人指定是否允许Intent激活已停止的应用程序中的组件。

     

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

     

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

     

如果在intent中定义了这两个标志中的任何一个或两个,则默认行为是在潜在目标列表中包含已停止应用程序的过滤器。

     

请注意,系统会将FL​​AG_EXCLUDE_STOPPED_PACKAGES添加到所有广播意图中。这样做是为了防止来自后台服务的广播无意或不必要地启动已停止应用程序的组件。后台服务或应用程序可以通过将FLAG_INCLUDE_STOPPED_PACKAGES标志添加到应允许激活已停止的应用程序的广播意图来覆盖此行为。

     

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

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

答案 1 :(得分:1)

它就像询问呼叫应用程序或消息应用程序是否始终保持运行,等待电话或短信。嗯,有一些名为BroadCastReceivers的Android Framework组件。无论何时收到呼叫,接收到消息,检测到Low Battrey,警报被触发,甚至收到通知,OS都会广播Intent消息。

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

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

这与您向GCM注册的APP_ID有关。这可以映射到您的应用程序包名称。我们在注册GCM时提供包名称