如果新数据到达Android,则从套接字读取数据

时间:2011-08-08 05:23:59

标签: android sockets timer inputstream

我有一个与服务器通信的应用程序。当NEW DATA可用于获取时,我希望我的应用程序只读取套接字的输入流。

目前,我创建了一个计时器,使用SocketChannel类java.nio.channels计划每20ms(轮询)读取套接字的输入流。这不是那么好,因为即使没有可用的数据,它也会最终读取套接字。它会快速耗尽电池。

是否有适用于Android的API会在新数据可用时告知或向已连接的客户端发送标记,以便我是唯一一次读取输入流?

1 个答案:

答案 0 :(得分:2)

请参阅this,但简短的回答是否定的,没有针对此的API。顺便说一下,如果数据不可用,SocketChannel / Selector实际上不会读取套接字,只需检查它的状态即可。

对于推送通知,您可以查看Android Cloud to Device Messaging Framework。 AFIAK,它以类似的方式实现:它们保持套接字打开,并发送通知 有空的时候。它很可能已经针对低电量使用进行了调整,并且是操作系统的一部分,所以可能值得一试(2.2及以上)。