推荐:
https://www.zhihu.com/question/44329366
1.handler设计是用来做什么的?
线程间通信。告知数据更新。
2.handler底层通信方式是什么?
管道。跨进程的管道被用于跨线程通信。据说android 2.3之前是使用java的wait notify机制。原因猜测,效率更高。
3.handler为什么不用binder?
未知。可能效率问题。
4.主线程给自己发送消息,如果后面还有代码要执行,是先处理消息,还是会执行完后面的代码呢?
例如
mhandler.sendMessage();
a=1;
method1();
是会先执行完后面的代码段a=1
和 method1,为什么?因为消息处理是有顺序的,只有执行完当前消息,才会处理下一个消息。所以消息处理是串行的方式。
5.handler大致工作流程是怎样的?
有4大主体,
handler,messagequeue,message,looper。looper执行messagequeue.next从消息队列取消息,如果没有消息,则阻塞在管道的读端nativepollonce方法。nativepollonce基于管道通信的方式。
这时handler往消息队列messagequeue插入消息message,其实就是在管道写端写数据。这时读端就有数据了,nativepollonce函数返回,消息到达,然后就触发了消息的处理。消息处理完成后再次阻塞在管道的读端nativepollonce方法,等待新一轮消息到达。