返回
Android点将台:烽火狼烟[-Handler-]
Android
2024-01-25 04:37:51
点将台的烽火狼烟,就是我们的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和异步标志。