Java android线程和处理程序-从后台线程更改UI对象

Java android线程和处理程序-从后台线程更改UI对象,java,android,multithreading,handler,Java,Android,Multithreading,Handler,我最近编写了一个小型android应用程序,用于在本地网络上发送和接收UDP消息。我有一个UDP接收器线程,用于侦听UDP数据包,我希望在收到包含特定数据字符串的数据包时在UI上启用一个按钮。我知道这必须通过处理程序来完成,问题是我对线程知之甚少,对处理程序知之甚少有人能解释一下如何将处理程序放入我的代码中吗谢谢 代码: public void startUDPlistener() { // Creates the listener thread LISTEN = true;

我最近编写了一个小型android应用程序,用于在本地网络上发送和接收UDP消息。
我有一个UDP接收器线程,用于侦听UDP数据包,我希望在收到包含特定数据字符串的数据包时在UI上启用一个按钮。我知道这必须通过处理程序来完成,问题是我对线程知之甚少,对处理程序知之甚少
有人能解释一下如何将处理程序放入我的代码中吗
谢谢

代码:

public void startUDPlistener() {

    // Creates the listener thread
    LISTEN = true;
    Thread listenThread = new Thread(new Runnable() {

        @Override
        public void run() {

            try {

                Log.i(LOG, "Listener started!");
                DatagramSocket socket = new DatagramSocket(BROADCASTPORT);
                socket.setSoTimeout(1500);
                byte[] buffer = new byte[BUFFERSIZE];
                DatagramPacket packet = new DatagramPacket(buffer, BUFFERSIZE);


                while(LISTEN) {

                    try {

                        Log.i(LOG, "Listening for packets");
                        socket.receive(packet);
                        String data = new String(buffer, 0, packet.getLength());
                        Log.i(LOG, "UDP packet received from "+ packet.getAddress() +" packet contents: " + data);




                    }
                    catch(IOException e) {

                        Log.e(LOG, "IOException in Listener " + e);
                    }
                }

                Log.i(LOG, "Listener ending");
                socket.disconnect();
                socket.close();
                return;
            }

            catch(SocketException e) {

                Log.e(LOG, "SocketException in Listener " + e);

            }
        }
    });

    listenThread.start();

}

您基本上只需添加一个,然后发送
消息
可运行

private final Handler mUiThreadHandler = new Handler(Looper.getMainLooper());

void fromAnyThread() {
    final String importantDataFromBackGroundThread = "!!!";
    mUiThreadHandler.post(new Runnable() {
        @Override
        public void run() {
            System.out.println("Hi from Ui Thread:" + importantDataFromBackGroundThread);
        }
    });
}

处理程序
处理它运行的线程中的所有消息/可运行项。如果指定
Looper.getMainLooper()
可以保证这是主线程。

使用处理程序的简单替代方法是使用
runOnUiThread(…)
方法: