如何通过RxJava实现无限循环?

时间:2019-03-06 23:20:34

标签: android rx-java2

只要该应用程序仍然存在,我就需要监听套接字。我们在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方法可以让我模拟无限循环吗?

1 个答案:

答案 0 :(得分:1)

为什么要为此使用RxJava?没必要只需启动一个线程即可。通过完全添加Rx,您使事情变得过于复杂。