基础疑问:handler的思考

推荐:

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方法,等待新一轮消息到达。

你可能感兴趣的:(基础疑问:handler的思考)