主线程中不执行耗时操作,子线程不更新UI
因此,Android提供了Handler来解决这个问题
子线程中 sendMessage ,通知主线程更新UI
**整个过程:
新建Handler,通过sendMessage或者post发送消息,Handler调用sendMessageAtTime将Message交给MessageQueue
MessageQueue.enqueueMessage方法将Message以链表的形式放入队列中
Looper的loop方法循环调用MessageQueue.next()取出消息,并且调用Handler的dispatchMessage来处理消息
在dispatchMessage中,分别判断msg.callback、mCallback也就是post方法或者构造方法传入的不为空就执行他们的回调,如果都为空就执行我们最常用重写的handleMessage。
runOnUiThread看起来很简单,其实原理也和上面的一样