Android Handler 传Looper

在Android开发中,我们经常会遇到需要在不同线程之间进行通信的情况。Android提供了Handler类来帮助我们实现线程间的通信。Handler是Android中处理消息的机制,它可以将消息发送到消息队列中,并且可以在指定的Looper线程中处理这些消息。

Looper

在Android中,每个线程都有一个Looper对象,它是一个消息循环。Looper会不断地从消息队列中取出消息并将其分发给Handler进行处理。默认情况下,主线程(UI线程)已经有一个Looper对象与之关联。

Handler

Handler是与特定Looper关联的对象,它用来处理消息。当我们创建一个Handler对象时,它会自动与当前线程的Looper关联。我们可以使用Handler发送消息、发送延迟消息或者处理消息。

代码示例

下面是一个简单的示例,演示了如何使用Handler在不同线程之间传递消息:

// 创建一个Handler对象,并在子线程中发送消息
Handler handler = new Handler(Looper.getMainLooper());
new Thread(new Runnable() {
    @Override
    public void run() {
        Looper.prepare();
        Handler subThreadHandler = new Handler();
        subThreadHandler.post(new Runnable() {
            @Override
            public void run() {
                // 在子线程中处理消息
                Log.d("SubThread", "Message from sub thread");
            }
        });
        Looper.loop();
    }
}).start();

// 主线程中处理消息
handler.post(new Runnable() {
    @Override
    public void run() {
        Log.d("MainThread", "Message from main thread");
    }
});

在上面的代码中,我们创建了一个Handler对象,并在子线程中使用Looper来创建一个子线程的消息循环。然后我们在子线程中使用Handler发送了一条消息。在主线程中,我们也创建了一个Handler对象,并使用它来处理来自子线程的消息。

总结

通过使用Handler和Looper,我们可以很方便地在不同线程之间传递消息。Handler可以让我们将消息发送到消息队列中,而Looper则负责从消息队列中取出消息并交给Handler处理。这种机制在Android开发中非常常见,帮助我们实现线程之间的通信。如果你需要在Android应用中进行线程间的通信,不妨尝试使用Handler和Looper来实现。