Android DatagramChannel.register()块执行

时间:2013-02-25 20:18:33

标签: java android sockets nio nonblocking

我在Java上有通用的网络非阻塞套接字库,在默认的JVM上一切正常,但在Android平台上的下一个代码块:

DatagramChannel channel;
. . .
channel.bind(...)
channel.configureBlocking(false);
. . .
channel.register(udpSelector,  SelectionKey.OP_READ | SelectionKey.OP_WRITE);

寄存器()上的块,执行可以被阻止20-40秒或永久,仅与OP_READ相同或仅与OP_WRITE相同。

任何提示如何解决?

编辑:Android 2.3和Android 4.0.4上的同样问题

1 个答案:

答案 0 :(得分:1)

这是一个重复的问题。请参阅 Java non-blocking IO selector causing channel register to block表示“Selector有几个记录的内部同步级别,你正在运行它们。在调用register()之前在选择器上调用wakeup()。确保select循环正常工作零选择键,这是唤醒()时会发生的事情。“