回顾handler消息机制过程

简单介绍:

1、MessageQueue(消息队列):单链表的数据结构来存储消息列表(存储单元)
作用:
插入:enqueueMessage(插入一条消息)
读取:next(读取该消息并从队列中移除该消息)此方法无限循环等新消息来从单链表移除

2、Looper(消息循环):无限循环监听是否有新消息,有就处理消息,没有一直等待着

3、ThreadLocal:可以在每个线程中存储提供数据的作用,可获取每个线程的Looper(提示:主线程是自动创建Looper的,而子线程默认是没有Looper的,需要Looper.prepareMainLooper() 或者Looper.prepare() ,创建的同时会自动创建MessageQueue ,然后Looper自动进入消息循环)

4、每个不同的线程可以通过同一个ThreadLocal都能得到相对应的数据。

发送消息的过程:

1、创建Message对象有两种方式new Message() 和 Message.obtain()
一般使用Message.obtain(),可以有效避免重复创建 Message 对象。

2、将Message对象设置的参数由handler发送:Handler.sendMessage(Message msg)和Handler.post(Runnable r)

3、没有立即发送,MessageQueue接收到消息一般通过MessageQueue.enqueueeMessage(Message msg,long when) 加入到消息队列

4、Looper进行循环接收处理消息,然后给dispatchMessage(msg)->handlerMessage()

注意:

每个Thread只能有1个Looper,但可以有多个 Handler

每个 Looper 可以有多个Handler

每个 Handler 只能有1个Looper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值