【问题标题】:how does whatsapp service gets restarted even if i force stop app?即使我强制停止应用程序,whatsapp 服务如何重新启动?
【发布时间】:2012-06-28 01:43:35
【问题描述】:

我在设备 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 服务,因此这意味着这个神奇的服务会在收到消息/通知后立即重新启动

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

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

【问题讨论】:

  • 我在 Android 4.4.4 上试过这个。我停止了 WhatsApp 形式的应用程序->强制停止。在此之后,我没有自动收到任何消息。我必须手动启动 WhatsApp 才能收到任何消息。这只发生在 2.3.6 上吗?

标签: android service background whatsapp


【解决方案1】:

在您对此答案投赞成票/反对票之前,请考虑到 答案现在已经快 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。

【讨论】:

  • 最佳答案!感谢herom的准确回复!
  • 不客气。如果此答案对您有帮助,请考虑将其标记为正确答案(单击检查),以便将此问题标记为已关闭;)
  • 好吧,我已经实现了 GCM,但是当我关闭服务时它没有收到推送通知,所以即使我们关闭服务并仍然收到消息,我认为 GCM 也没有帮助
  • GCM 需要可用的互联网连接。通过此限制,您可以使用任何其他广播接收器,例如 SMSReceiver。
  • 实际上这不是真的,因为如果我在我的应用程序中实现 GCM(推送通知)并且我杀了它,我将不会收到任何推送。实际上,我认为即使在被杀死后唤醒您的应用程序的最佳方法是在您的清单中注册 intent-filter,但我认为它不适合这种情况。
【解决方案2】:

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

即使应用包含Service 或活动的BroadcastReceiver,也会发生这种情况。

你可以找到官方文档here

【讨论】:

  • 同意的最佳解决方案之一。
  • solution 让我很开心。
【解决方案3】:

我对 WhatsApp 服务一无所知。

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

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

【讨论】:

  • START_STICKY 未在棒棒糖版本中重新启动服务.. 一切正常
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多