为什么使用handler?
1、从UI的层面来看:
屏幕的刷新频率是60HZ,约16ms 一次。为了保证UI的流畅性,不阻塞,需要耗时的操作异步执行,然后通过handler异步更新UI主线程。
2、Android中的UI控件不是线程安全的,因此在多线程并发访问UI的时候会导致UI控件处于不可预期的状态。Google
不通过锁的机制
来处理这个问题是因为:
引入锁会导致UI的操作变得复杂
,导致UI的运行效率降低
因此,Google的工程师最后是通过
单线程的模型来操作UI
,开发者只需要通过Handler在不同线程之间切花就可以了。
概述Android的消息机制?(java的实现机制)
Android的消息机制就是Handler的运行机制。主线程和子线程之间的切换是其中一种特殊运用,哪里都有它的身影。了解Handler消息传递机制,同时需要了解MessageQueue、Looper、Handler。
整个消息机制的流程:
创建消息队列-->进入消息循环(有消息则处理,没有则进入睡眠等待状态)-->发送/处理消息
MessageQueue:描述消息队列。
Looper:创建消息队列,进入消息循环。
Handler:发送,处理消息。
消息循环中,起关键作用的是一个pipe
。在Looper对象创建的过程中,会在内部创建一个pipe。Looper中保存pipe的读端文件描述符(read Fd)和写端文件描述符(write Fd)。当其他线程向这个线程的消息队列发送消息后,其他线程会通过这个pipe的read Fd写入一个数据,从而唤醒线程,然后处理消息。linux epoll机制可以监听IO的读写事件。