返回

Android点将台:烽火狼烟[-Handler-]

Android

点将台的烽火狼烟,就是我们的Android消息机制,在Android中,很多事件都会通过Handler来进行消息分发,它就像一个哨兵,时刻监听着系统的消息,并将其传递给对应的处理者,从而实现系统的有序运作。

前言

在Android开发中,Handler是消息传递的基石,它负责协调不同线程之间的通信,确保应用程序的平稳运行。本文将深入剖析Handler的内部机制,从异常入手,循序渐进地阐述其使用方式和原理,并详细解读其主要成员变量和构造函数。

一、引入Handler的一般套路

1. 说Handler一般套路是从一个异常开始

当你在使用Handler时,最常遇到的问题就是Handler引起的异常。这个异常通常是Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views。

2. 然后再俗套的说一下怎么用Handler解决

解决这个问题的办法就是使用Handler来处理跨线程的消息传递。Handler可以将消息从一个线程发送到另一个线程,从而避免了直接跨线程操作View的错误。

3. 源码中对Handler的

在Android源码中,对Handler的如下:

public class Handler {

    /**
     * Callback interface you can implement to handle messages or runnables.
     */
    public interface Callback {
        boolean handleMessage(Message msg);
    }

    /**
     * Default constructor associates this handler with the Looper for the current
     * thread.
     * <p>
     * If this thread does not have a looper, this handler won't be able to receive messages
     * so an exception is thrown.
     *
     * @throws RuntimeException if the msg queue for the current thread is null.
     *
     * @see #Handler(Looper)
     * @see #Handler(Looper, Callback)
     */
    public Handler() {
        this(Looper.myLooper(), null, false);
    }

4. 主要成员变量

Handler的主要成员变量包括:

  • mLooper :消息循环,用于处理消息。
  • mCallback :消息回调,用于处理消息。
  • mQueue :消息队列,用于存储消息。
  • mNext :下一个Handler,用于处理消息。

5. 构造

Handler的构造方法包括:

  • Handler() :默认构造方法,关联当前线程的Looper。
  • Handler(Looper looper) :指定Looper构造方法,关联指定的Looper。
  • Handler(Looper looper, Callback callback) :指定Looper和Callback构造方法,关联指定的Looper和Callback。
  • Handler(Looper looper, Callback callback, boolean async) :指定Looper、Callback和异步标志构造方法,关联指定的Looper、Callback和异步标志。