2011-08-08 136 views
3

我有一个与服务器通信的应用程序。当新数据可用于读取时,我希望我的应用程序只读取套接字的输入流。如果新数据到达Android,从套接字读取数据

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

是否有一个Android API会告诉或发送一个标志到连接的客户端,只要有新的数据可用,这样它就是唯一一次我将读取输入流?

回答

2

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

对于推送通知,您可能会检查Android Cloud to Device Messaging Framework。 AFIAK,它以类似的方式实现:它们保持插座打开,并在可用时发送通知 。它很可能已经针对低电池使用情况进行了调整,并且是操作系统的一部分,因此可能值得一试(2.2及以上)。