Android上持久移动连接的最佳做法?

时间:2012-06-21 16:18:50

标签: android xmpp websocket real-time

我正在考虑从Android应用程序使用持久连接到“云服务”。这将一直在后台服务(或类似的东西)中运行。

我正在考虑使用网络套接字或XMPP来保持连接,基本上寻找一种不会耗尽电池的轻量级连接。我希望能够实时推送通知到此连接,因此不需要定期轮询。 我知道C2DM和其他商业解决方案,但我希望推出自己的。这就是我正在调查的网络插座(或其他轻量级连接)的原因。所以如果我走这条路,我应该注意哪些最佳实践?

我在考虑这样的事情:

  1. 如何防止电池耗尽,
  2. 如何处理IP地址变更等?

2 个答案:

答案 0 :(得分:10)

这可能不是您正在寻找的答案,但我想您可能想重新考虑您的架构。

您可以从移动平台中获得的东西

  • 您要随机更改的IP地址
  • 您的物理互联网连接将随机丢失
  • 操作系统决定你没有做任何有用的事情并杀死你的过程
  • 连接类型随机变化(从WIFI到4G到3G到边缘),从而改变你的IP

基本上你的应用程序需要能够处理连接丢失,因为它几乎可以保证发生。

话虽如此,根据您对实时的定义,它完全可行。如果您愿意不断检查是否仍然存在可行连接,则可以将延迟时间保持在分钟范围内。但是这会耗尽电池电量,你无能为力。

答案 1 :(得分:1)

有些事情并不顺利。那是“实时推送通知”“防止电池耗尽”。你一定要在这里妥协。

我只能推荐尝试一些使用XMPP的Android应用程序来了解它们如何处理持久连接,IP地址更改和电池消耗。如果它们是开源的,您还可以查看代码并从中学习。 Yaxim,Project MAXS和Beem等等。也许你也应该看看XEP-0286: XMPP on Mobile Devices

那就是说,当Google为您提供C2DM时,您确定要重新发明轮子吗?针对此用例进行了优化。我认为它有一些延迟,所以它不是“实时”的地方。但同样,要么你最终会得到一个解决方案,试图建立一个持久的连接和耗尽电池,或者你将不得不忍受某种延迟(约0-30分钟)。