【问题标题】:Best way to implement long-term communication with server实现与服务器长期通信的最佳方式
【发布时间】:2013-08-29 07:36:02
【问题描述】:

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

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

我还阅读了有关服务的信息(我从未使用过)。

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

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

附注抱歉英语不好,希望你能理解:)

【问题讨论】:

    标签: android android-asynctask android-service


    【解决方案1】:

    您可能应该使用Service,在后台运行。

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

    1. 从服务器接收通知,启动服务并进行必要的处理。
    2. 向服务器发送通知,服务器在该服务器上执行任何必要的工作。

    这些通知是 4kb 的短消息,因此它们更适合用作发布/订阅模型的“命令”,用于启动其他网络繁重的连接,例如上传和下载。其余时间服务可以处于非活动状态以减少资源消耗。

    【讨论】:

    • 不错,没用过。我会检查并尝试,因为减少资源消耗也很重要。但是新组件(谷歌消息服务器)可能需要一些时间来发送或获取消息。它是否足够快,因为我需要即时反应,因为试图构建将信息发送到服务器的应用程序,这将切换电视频道、音量......
    • @Ragaisis 对于即时更新(设备到服务器),您可以直接联系服务器,因为服务器地址通常相同。为了向设备接收信息,您需要依赖 GCM,因为服务器无法始终找到设备的地址。
    【解决方案2】:

    根据Android API Reference
    "A Service 是一个应用程序组件,可以在后台执行长时间运行的操作"

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

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

    【讨论】:

      【解决方案3】:

      如果您想向服务器发送数据时需要与服务器通信,您可以这样做并等待应答。如果您需要将数据从服务器发送到设备,请查看push notifications。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-27
        • 2011-01-15
        • 2016-09-04
        相关资源
        最近更新 更多