Handler的主要两个作用:1,周期性的发送和处理消息或者runnable 2,在不同的线程去响应不同的操作
Handler sendMessage和post最主要的区别是sendMessage携带Bundle数据过去, sendMessage必须子类实现handMessage,这两者最终调用的都是sendMessageAtTime,只是sendMessage发送的是一个message,message可携带数据,而post发送的是一个空的message但是有一个runnable,ps:postAtTime可以带一个object对象。
sendMessage的时候每次都会传一个updateTime,正常的话就是当前时间
postAtFrontOfQueue可以将message放入队列的头部(原理是传的when为0,所以会放在队列的表头)。一个线程有一个Looper,一个MessageQueue,多个handler和多个message
ThreadLocal里边根据当前线程存放looper对象。
message的休眠原理,在入列的时候根据message时间来确定在队列中的位置。
https://my.oschina.net/youranhongcha/blog/492591
同步分割栏:就是当looper不断的从消息队列里去消息,当遇到这个标志的话,会中断同步消息的摘取,但会继续摘取异步消息
关于Android的消息机制,我们就先说这么多。总体上的而言还是比较简单的,无非是通过Handler向Looper的消息队列中插入Message,而后再由Looper在消息循环里具体处理。因为消息队列本身不具有链表一变动就能马上感知的功能,所以它需要借助管道和epoll机制来监听变动。当外界向消息队列中打入新消息后,就向管道的“写入端”写入简单数据,于是epoll可以立即感知到管道的变动,从何激发从消息队列中摘取消息的动作。这就是Android消息机制的大体情况。
网友评论