消息传递机制之Handler简介

本文介绍了Android中的Handler机制,作为异步处理大师,Handler负责添加消息到消息队列并处理它们。每个Handler关联一个Looper,一个线程只能有一个Looper,但可以有多个Handler。Handler可以通过sendMessage或post方法发送消息,尽管post方法看起来发送Runnable,但实际上最终都会转化为Message。Handler的dispatchMessage和handleMessage方法用于处理消息,解决在非主线程更新UI的问题。示例代码展示了如何使用Handler进行线程间通信。
摘要由CSDN通过智能技术生成

一、异步处理大师 Handler

什么是handler?handler扮演了往MQ上添加消息和处理消息的角色(只处理由自己发出的消息,即通知MQ它要执行一个任务(sendMessage),并在loop到自己的时候执行该任务(handleMessage),整个过程是异步的。handler创建时会关联一个looper,默认的构造方法将关联当前线程的looper。默认的构造方法:

publicclass handler {
       

final MessageQueue mQueue;  // 关联的MQ
final Looper mLooper;  // 关联的looper
final Callback mCallback; 
// 其他属性........

public Handler() {
         
if (FIND_POTENTIAL_LEAKS) {
       
final Class<?extends Handler> klass = getClass();
if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&
                 (klass.getModifiers() & Modifier.STATIC) ==0) {
       
                Log.w(TAG, "The following Handler class should be static or leaks might occur: "+
                klass.getCanonicalName());
            }
        }
// 默认将关联当前线程的looper
        mLooper = Looper.myLooper();
// looper不能为空,即该默认的构造方法只能在looper线程中使用
if (mLooper ==null) {
       
thrownew RuntimeException( 
"Can't create handler inside thread that has not called Looper.prepare()");
        }
        }
// 重要!!!直接把关联looper的MQ作为自己的MQ,因此它的消息将发送到关联looper的MQ上
        mQueue = mLooper.mQueue;
        mCallback =null;
}
// 其他方法
}

下面我们就可以为之前的LooperThread类加入Handler:

publicclass LooperThread 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值