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处理消息,没有则循环等待。

猜你喜欢

转载自blog.csdn.net/ziyonghong/article/details/81254585