Android在子线程用handler发送的消息,主线程是怎么loop到的
展开全部
因为你是在主线程创建的handler实例,比如你是这样实例化handler
那么我们进到handler源码看一下
可以看到这里会调用重载的另外一个构造方法,我们再跟进
我们可以看到 mLooper=looper.myLooper(); 这是获取当前线程的looper实例,也就是主线程的looper。所以当发送消息的时候主线程就可以获取到消息。往下看系统还会mLooper是否为空,如果为空就会抛出异常,意思是当前线程没有looper实例,这也是我们在子线程中没有创建looper的实例的时候创建handler会报错的原因,主线程不会报错是因为程序在启动的时候在activitythread中的main方法就创建了looper实例,看系统源码
然后调用looper.loop();就开始了消息循环。这就是为什么在主线程发消息住线程还能收到消息的原因。因为发送消息的实例是在主线程实例化的就有了主线程的looper。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询