handler
(1)什么是Handler:
在平时的安卓开发过程中,Handler一定不少见,Handler是Android消息机制的上层接口,这使得在开发过程中只需要和Handler交互即可。很多人认为Handler的作用就是更新UI,的确没错,但是更新UI仅仅是Handler的一个特殊的使用场景。具体来说,就是有时候需要在子线程做一些耗时操作,比如说访问网络或者耗时的I/O操作,当这些耗时操作完成时,程序的UI进行相应的改变。由于安卓开发规范的限制,我们不能在子线程中访问UI控件,因为UI的控件是线程非安全的,这个时候通过Handler就可以将更新UI的操作切换到主线程中执行。下面我就通过代码来演示Handler的基本用法。
(2)Handler有什么用?
Handler这个类就是管理某个线程(也可能是进程)的消息队列,比如让Handler处理主线程的消息队列,这样就可以将一些耗时任务放到其他线程之中,待任务完成之后就往主线程的消息队列中添加一个消息,这样Handler的Callback,即handleMessage就会被调用。但是Handler并不是线程安全的,因此官方文档中建议将Handler作为一个静态内部类。
所以Handler只是处理消息,耗时任务放在其他线程。
Handler的使用主要是android中无法在主线程(即UI线程)中访问网络、无法在子线程中访问UI线程元素。一般是在子线程中访问网络,然后使用Handler发送message通知主线程处理UI更新操作。
(3)Handler机制:
(4)Handler四大重要的类:
Looper,Message,MessageQueen,Handler和一个线程
1.一个线程可以产生一个Looper对象,由他来管理线程里的MessageQueen(消息队列)。
2.Handler你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queen里面,或者接受Looper从MessageQueen锁取出来的消息。
3.MessageQueen(消息队列),用来存放线程存放线程放入的消息。
4.Handler消息的封装者和处理者,handler负责将需要传递的信息封装成Message,通过调用handler对象的obtainMessage()来实现;将消息传递给Looper,这是通过handler对象的sendMessage()来实现的。继而由Looper将Message放入MessageQueue中。当Looper对象看到MessageQueue中含有Message,就将其广播出去。该handler对象收到该消息后,调用相应的handler对象的handleMessage()方法对其进行处理。
5.线程,Ui thread通常就是mainThread,Android启动程序时会替他建立一个MeassageQueen。