Android在子线程用handler发送的消息,主线程是怎么loop到的

 我来答
百度网友4f287f2
2017-09-10 · TA获得超过299个赞
知道小有建树答主
回答量:223
采纳率:33%
帮助的人:84万
展开全部

因为你是在主线程创建的handler实例,比如你是这样实例化handler

那么我们进到handler源码看一下

可以看到这里会调用重载的另外一个构造方法,我们再跟进

我们可以看到 mLooper=looper.myLooper();  这是获取当前线程的looper实例,也就是主线程的looper。所以当发送消息的时候主线程就可以获取到消息。往下看系统还会mLooper是否为空,如果为空就会抛出异常,意思是当前线程没有looper实例,这也是我们在子线程中没有创建looper的实例的时候创建handler会报错的原因,主线程不会报错是因为程序在启动的时候在activitythread中的main方法就创建了looper实例,看系统源码

然后调用looper.loop();就开始了消息循环。这就是为什么在主线程发消息住线程还能收到消息的原因。因为发送消息的实例是在主线程实例化的就有了主线程的looper。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式