2013-08-29 54 views
1

我需要打开并保持与服务器的长期连接才能发送消息,并收到响应。有时服务器也会在没有用户请求的情况下发送信息,所以android设备应该听取服务器的反应。与服务器实现长期通信的最佳方式

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

我也读过关于服务(我从来没有使用过)。

是否可以与保持连接处于活动状态的服务器建立长期(1-4小时)的连接,侦听用户命令(例如,单击按钮时需要将数据发送到服务器)并接收来自服务器(然后更改UI)。 当手机入睡,需要更多的内存或其他功能时,服务(和连接)会被终止吗?电池的成本是很高的吗?

也许还有其他方法吗?预先感谢您所有的答案

P.S.遗憾的英语不好,希望大家理解:)

回答

2

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

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

  1. 接收来自服务器的通知,启动服务并进行必要的处理。
  2. 发送通知到服务器,在哪个服务器上做任何必要的工作。

这些通知是简短的4kb消息,所以它们最好用作发布/订阅模型的“命令”,它可以启动其他网络繁重的连接,例如上传和下载。其余时间服务可以不活动以减少资源消耗。

+0

不错,从未使用它。我会检查并尝试,因为减少资源消耗也非常重要。但新组件(Google Messagin服务器)可能需要一些时间才能发送或获取消息。是否足够快,因为我需要即时反应,因为试图构建的应用程序,将发送信息到服务器,这将切换电视频道,音量... – Ragaisis

+0

@Ragaisis即时更新(设备到服务器),你可以直接联系服务器,因为服务器地址通常是相同的。为了接收设备的信息,您需要依赖GCM,因为服务器无法找到设备的地址。 –

0

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

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

所以我觉得服务满足您的需求。

0

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

相关问题