一篇比较好的博客:https://www.jianshu.com/p/5555d1138d00
子线程执行:
1. runOnUiThread使用示例
runOnUiThread(new Runnable(){
public void run(){
//执行更新ui的操作
}
});
AsyncTask用法总结:
子线程执行runOnUiThread,传入参数Runnable并复写run方法,则run方法会在主线程中执行,因此在run方法中可以执行更新UI的操作
2. runOnUiThread的流程
由Handler机制可知,Handler会将Runnable封装成一个Message并放入MessageQueue队列尾部,其中Message.callback = Runnable,Message.target = Handler,接着Looper会从MessageQueue取出Message,执行Handler.dispatchMessage
最终回调到主线程调用Runnable复写的run方法
3. 总结
3.1. runOnUiThread用法总结
子线程执行runOnUiThread(),传入参数Runnable,并复写run方法
3.2. runOnUiThread原理总结
Handler会执行post将参数Runnable封装成一个Message并放入MessageQueue队列尾部,其中Message.callback = Runnable,Message.target = Handler
最终执行Handler.dispatchMessage判断Message.callback是否为空,如果Message.callback为空则调用Handler.handleMessage,如果Message.callback不为空则调用Handler.handleCallback,在handleCallback中调用Runnable复写的run方法,所以runOnUiThread的根本原理是Handler机制