基础篇——Handler异步回调机制

为什么要有Handler?

1.主线程不能做耗时操作(例如访问网络,数据库操作),要放在子线程;
2.子线程又不能修改主线程的UI;
所以就需要用到Handler,在子线程处理完成后,通知主线程更新UI。Handler是线程间通信的工具,就是用来解决线程和线程之间的通信的。
注:主线程也不能修改子线程创建的UI。

Handler的原理:

Android中提供了一种异步回调机制Handler,可以在完成一个很长时间的任务后做出相应的通知。

image.png

图解:使用Handler.sendEmptyMessage(0)发送一个Message之后,会把Message放到MessageQueue队列中,该队列属于某个Looper对象。每个Looper对象通过ThreadLocal.set(new Looper)跟一个Thread绑定在一起,该Looper对象所属的线程在Looper.loop中循环执行获取MessageQueue队列中的Message对象的操作,并将Message对象交给Handler处理,调用Handler的dispatchMessage方法。

注:1.sendEmptyMessage到handlerMessage的过程,途中经过Looper.MessageQueue队列,转由Looper所属的线程去处理,这是一个异步的过程。(Looper所属的线程可以是sendEmptyMessage所在的线程)
2.Looper.prepare()和Looper.loop()之间的代码是运行在主线程的。


早计划,早准备,早完成。 欢迎关注!交流!Star!

GitHub:https://github.com/wangyang0313

微信公众号:一个灵活的胖子MrWang

CSDN:https://blog.csdn.net/qq941263013

20200430145304899.jpg

你可能感兴趣的:(基础篇——Handler异步回调机制)