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

标签 android sockets timer inputstream

我有一个与服务器通信的应用程序。我希望我的应用程序在可获取新数据时只读取套接字的输入流。

目前,我使用 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/

相关文章:

Android:Mediaplayer:如何使用 SurfaceView 或 mediaplayer 以正确大小播放视频

android - 类扩展 FrameLayout 并膨胀 FrameLayout

c - 在 Linux 中选择慢速套接字

Java System.currentTimeMillis() 问题

Android 6.0 构建错误 - sap-api.pb.h

android - 在 Android 上点击 Web 链接的奇怪行为

c - 监听两个不同端口的 TCP 服务器

java - 从未收到 SSH 服务器标识 - 握手死锁 [SSHJ]

c - timer_settime 在 uClinux 上的 pthread 中调用处理函数

javascript - 基于计时器 jQuery 循环悬停状态