不能在非UI线程中更新UI。
Android提供了Handler 和 Looper 来满足线程之间的通信。
Looper类用来管理特定线程内对象之间的消息交换。
1、首先在一个线程中Loop.prepare()方法会在本线程中创建一个Looper实例,然后该实例又会创建一个MessageQueue对象。Looper.perpare()在一个线程中只会调用一次,因此一个线程中只有一个Looper实例和一个MessageQueue。
2、Looper.loop()会让当前线程进入一个无限循环,不断从MessageQueue的实例中读取消息,然后回调msg.target.dispatchMessage(msg)方法。
3、Handler的构造方法,会首先得到线程的保存的Looper实例,进而与MessageQueue相关联。
4、Handler的SendMessage方法,会给msg的target赋值为handler自己,然后加入到MessageQueue中。
5、在构造Handler实例时,会重写handlerMessage方法,就是msg.target.dispatchMessage(msg)方法。
message.sendToTarget()-->其中Target的目标就是handler自己
handler.removeCallbacks(runnalbe); 将此Handler在线程中移除
HandlerThread类可以方便的在Handler中实现子线程的操作。
-
runOnUIThread
-
handler post
-
handler sendMessage
-
view post