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