Android DatagramChannel.register() block execution



我在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同样的问题

这是一个重复问题。请参阅Java非阻塞IO选择器导致通道寄存器阻塞,其状态是"选择器有几个记录的内部同步级别,您正在遇到它们。"在调用register()之前调用选择器上的wakeup()。如果没有选择键,请确保select循环正确工作,这就是wakeup()时将发生的情况。"

最新更新