android 和 UDP 数据包的奇怪行为

Strange behavior with android and UDP packets

我在 android studio 中制作了一个简单的应用程序来发送 UDP 数据包,所以当我单击一个按钮时,它会调用一个函数来检查调用该函数的组件类型并分别发送不同数据包的数据。 这是发送数据包的函数:

    public void sendPacket(View v) {
    if (v instanceof Button)
        buffer = ((Button) v).getHint().toString().getBytes();
    else if (v instanceof EditText)
        buffer = ((EditText) v).getText().toString().getBytes();
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);
            try {
                SelectionActivity.datagramSocket.send(packet);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();
}

这是调用 sendPacket() 函数的 main 函数中的侦听器:

        btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (<some checks>)
                sendPacket(txt.findViewById(R.id.txt));
            sendPacket(btn.findViewById(R.id.btn));
        }
    });

问题是它随机发送一个数据and/or另一个即使它改变

例如:

1)

缓冲区 = 0x01

发送 0x01

缓冲区 = 0x02

发送 0x02

2)

缓冲区 = 0x01

发送 0x01

缓冲区 = 0x02

发送 0x01

卧槽?!

已通过使用 thread.join() 解决,因为它需要等待线程完成才能发送具有更新缓冲区的新数据包。