handler主要用于线程的切换,因为在安卓中,主线程不能进行耗时操作,而子线程不能更新UI,所以当子线程网络请求或执行其他耗时任务完成后,在更新UI的时候,需要将获取的数据发送的主线程,这个时候我们经常使用handler进行线程的切换。Handler机制主要涉及到四个类,handler,message,looper,messageQueue,首先message在子线程负责携带消息进行发送,messageQueue相当于一个容器,对发过来的消息进行统一处理,looper相当于消息循环器,不停循环消息队列中的消息,交给消息处理者handler进行消息处理。
关于主线程向子线程发消息的问题:因为Android主线程默认持有looper循环器,所以当我们在主线程创建了handler以后,子线程发消息后,handler会通过已有的looper获取到消息队列中的消息,但是,如果handler创建在子线程,子线程是没有looper的,所以需要我们手动调用looper.prepare()方法,然后当子线程的handler需要数据的时候,调用looper.loop()方法去循环消息队列中的消息。
网友评论