26

我在设备 A 上运行 whatsapp(从现在开始我们可以称之为 appX)。我去管理应用程序 -> 强制关闭,所以 appX 被关闭,我不再将 appX 视为正在运行的服务。

现在,5 分钟后,我从另一台设备的 appX(设备 B)向设备 A appX(我们杀死它的那个)发送了一条消息。以下是我测试的 2 个场景:

  • 带有 android 2.1 的设备 A:它永远不会收到消息,因此我们可以说所有 appX 服务都没有重新启动。如果用户手动重新启动应用程序,它只会收到消息。

  • 带有 android 2.3.6 的设备 A:出于某种神奇的原因,无论 appX 被杀死后多久,只要我们从设备 B 发送消息 - > 设备 A 收到消息,appX 的服务就会重新启动。注意:在 appX 关闭并且没有收到任何通知的情况下,我无法在管理应用程序中看到任何正在运行的 appX 服务,因此这意味着这个神奇的服务会在收到消息/通知后立即重新启动

我知道这听起来很奇怪,很多人会说这是不可能的,但同样,这已经在这两种设备上进行了测试。

我正在尝试完成同样的行为,因此我们将不胜感激。

4

4 回答 4

49

在您对此答案投赞成票/反对票之前,请考虑到该答案现在已经将近 3 年了(说到 2015 年 5 月),情况可能已经改变!

我认为这里发生的事情并不神奇!它只是 Android C2DM(请参阅:https ://developers.google.com/android/c2dm/ ),而应用程序已注册Receiver传入推送通知并被此消息唤醒。Android C2DM 是/曾经在 Android 2.2 中可用,这就是为什么在 Android 2.1 启动并运行的设备上看不到相同行为的原因。

顺便说一句:如您所见,自 2012 年 6 月 26 日起,C2DM 已被弃用。因此,应该使用 GCM 而不是 C2DM(参见:http: //developer.android.com/guide/google/gcm/gs.html

有用的评论:GCM 需要可用的互联网连接。通过此限制,您可以使用任何其他广播接收器,例如 SMSReceiver。

于 2012-06-28T05:55:19.983 回答
13

Android 3.1 (API 12) 开始,如果应用程序被强制停止,它将不会重新启动,直到用户再次手动运行该应用程序

即使应用程序包含 aService或 active ,也会发生这种情况BroadcastReceiver

你可以在这里找到官方文档。

于 2015-01-09T09:54:31.697 回答
2

我不知道 WhatsApp 服务。

但是有可能在强制停止应用程序后,重新启动应用程序的服务。

我为我的聊天应用程序使用START_STICKY服务。我必须做同样的事情,所以我使用 START_STICKY 服务,所以当我的应用程序终止或强制停止设置时,几秒钟后我的服务重新启动,我能够登录到我的 xmpp 服务器并接收传入消息。

于 2015-01-09T11:33:02.460 回答
1

这里没什么神奇的 appX 通过 android GCM 平台https://developer.android.com/google/gcm/index.html在 GCM 中使用推送通知应用程序注册广播接收器,广播接收器在获取推送通知时启动服务. Android GCM 依赖于 android 2.2 及更高版本上可用的 google play 服务,因此您在 2.1 设备上看不到该消息

于 2015-01-14T05:41:16.060 回答