Android之线程
先看一个报错:
报的错是:只有原始线程才能更改它的属性。
而我们试图让子线程更改UI线程中控件的属性是不允许的。
因为android中相关的view和控件不是线程安全的,我们必须单独做处理。就要使用handler,handler的原理是一个发送消息,处理消息的过程。
hander机制:
1.Handler创建消息
每一个消息都需要被指定的Handler处理,通过Handler创建消息便可以完成此功能。
2.Handler发送消息
UI主线程初始化第一个Handler时会通过ThreadLocal创建一个Looper,该Looper与UI主线程一一对应。Looper初始化的时候会创建一个消息队列MessageQueue。因此 主线程、Looper、MessageQueue之间的关系是1:1:1。
而一个Looper可以对应多个Handler。如图
3.Handler处理消息
子线程 通过Handler创建消息 ,子线程 通过handler将消息发送到消息队列中,主线程对应的Looper查询消息队列中是否有消息。有则调用Handler处理消息,没有则循环等待。