只要该应用程序仍然存在,我就需要监听套接字。我们在Java(无限循环)中以这种方式进行操作:
public void listen() throws Exception {
String msg;
while (isRunning) {
byte[] buf = new byte[5 * 1024]; // Size: 5K
DatagramPacket packet = new DatagramPacket(buf, buf.length);
// blocks until a packet is received
udpSocket.receive(packet);
msg = bytesToHexString(buf);
print("Message from " + packet.getAddress().getHostAddress() + ": " + msg);
pm.setNotification(msg);
}
}
我可以使用RxJava2在另一个线程中运行它(以防止Android中的主线程网络异常)。
try {
udpClient = new UDPClientMulticast("232.17.29.10", 4444);
Disposable d1 = Single.just(udpClient)
.subscribeOn(Schedulers.io())
.map(client -> {
client.listen();
return true;
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(isListening -> print("UDP Client is listening: " + isListening), t -> print("Error: " + t.getMessage()));
cd.add(d1);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
即使它起作用了,我也觉得这很丑陋。有什么Rx
方法可以让我模拟无限循环吗?
答案 0 :(得分:1)
为什么要为此使用RxJava?没必要只需启动一个线程即可。通过完全添加Rx,您使事情变得过于复杂。