与服务器实现长期通信的最佳方式

时间:2013-08-29 07:36:03

标签: android android-asynctask android-service

我需要打开并与服务器保持长期连接以发送消息,接收响应。有时服务器在没有用户请求的情况下发送信息,因此android设备应该监听服务器并做出反应。

有AsyncTasks,我可以实现套接字连接,但主要问题是我只知道一种方式 - 发送请求并收到一次响应。然后关闭AsyncTask(和连接)。

我也读过有关服务(我从未使用过)。

是否可以与保持连接活动的服务器建立长期(1-4小时)连接,侦听用户命令(例如,需要在单击按钮时将数据发送到服务器)并从服务器接收响应或请求(然后更改UI)。 当手机入睡时,服务(和连接)会被杀死,需要更多的记忆或其他吗?这是电池的大成本吗?

也许有其他方法?提前感谢您的所有答案

P.S。抱歉英语能力差,希望你明白:)

3 个答案:

答案 0 :(得分:2)

您应该使用在后台运行的Service

此外,您确实无需通过网络连接保持服务始终处于活动状态。您可以选择支持2-way communication via the XMPP protocol的Google Cloud Messaging。使用此协议,您可以:

  1. 从服务器接收通知,启动服务并进行必要的处理。
  2. 向服务器发送通知,服务器在该服务器上执行任何必要的工作。
  3. 这些通知是简短的4kb消息,因此它们更好地用作发布/订阅模型的“命令”,它启动其他网络密集连接,例如上载和下载。其余时间服务可以处于非活动状态以减少资源消耗。

答案 1 :(得分:0)

根据Android API Reference
“服务是一个可以在后台执行长时间运行的应用程序组件”

是的,它消耗电池,你必须自己停止: “重要的是你的应用程序在完成工作后停止服务,以避免浪费系统资源和消耗电池电量”

所以我认为服务符合您的需求。

答案 2 :(得分:0)

如果您想要将数据发送到服务器时需要与服务器通信,则可以执行此操作并等待应答。如果您需要将数据从服务器发送到设备,请查看push notifications