Handler学习笔记
--------------------------Promise yourself to be strong that nothing can disturb your peace of mind.
1.Looper是个死循环,在当前线程中looper并没有开一个新线程,因为它是由系统来循环的。
2.Handler作用:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器;
2)线程间通信。在android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息列队发送消息了。由于android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
3.角色描述
1)Looper:(相当于隧道)一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(车队,消息隧道)。
2)Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper(从Message Queue取出)所送来的消息。
3)Message Queue(消息队列):用来存放线程放入的消息。
每一个线程里可含有一个Looper对象以及一个MessageQueue数据结构。在你的应用程序里,可以定义Handler的子类别来接收Looper所送出的消息。
主线程就是一个消息队列,为什么不同实例之间不能共享消息(what flag标识)?
总结:1)Handler实例与消息处理是关联的,发送和接收要匹配;
2)Handler接收队列,主要是在子线程操作主线程消息队列;
3)子线程默认是没有消息队列的。
4.使用Handler是异步,不会建立新线程,Handler一般是在主线程中,如果用实例化Looper后,进行操作,可以在当前线程进行。
使用android去访问网络资源,绝对不能在UI主线程去开,去直接访问我们的网络,我们必须要声明一个子线程,然后在子线程中访问网络,再把子线程中访问网络得到的结果返回到UI主线层中,在UI主线程中更新UI.