我有一个与服务器通信的应用程序。我希望我的应用程序在可获取新数据时只读取套接字的输入流。
目前,我使用 java.nio.channels 的 SocketChannel 类创建了一个计时器,它计划每 20 毫秒(轮询)读取一次套接字的输入流。这不是很好,因为即使没有可用数据,它也会以读取套接字结束。而且它会快速耗尽电池电量。
是否有适用于 Android 的 API 会在新数据可用时告知或向连接的客户端发送标志,以便这是我读取输入流的唯一时间?
最佳答案
参见 this ,但简短的回答是否定的,没有这方面的 API。顺便说一句,如果数据不可用,SocketChannel/Selector 实际上不会读取套接字,只是检查它的状态。
对于推送通知,您可以检查 Android Cloud to Device Messaging Framework . AFIAK,它以类似的方式实现:它们保持套接字打开,并发送通知 有空的时候。它很可能已经针对低电池使用率进行了调整,并且是操作系统的一部分,因此可能值得一试(2.2 及更高版本)。
关于android - 如果新数据到达 Android,则从套接字读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6978051/