handler是主线程和子线程的纽带,当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发。
如果此时需要一个耗时的操作,例如:联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到Android系统的一个错误提示"强制关闭".
要把这些耗时的操作,放在一个子线程中,当子线程有需求更新主线程时,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传递)Message对象,(里面包含数据), 把这些消息放入主线程队列中,配合主线程进行更新UI。
handler可以分发Message对象和Runnable对象到主线程中
每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
Handler对象初始化后,就默认与对它初始化的进程的消息队列绑定,
因此可以利用Handler所含的消息队列,制定一些操作的顺序。
post类方法允许你排列一个Runnable对象到主线程队列中
post(Runnable)
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.
sendEmptyMessage(int)
传消息的实例
1,传递Message。用于接受子线程发送的数据, 并用此数据配合主线程更新UI。
在Android中,对于UI的操作通常需要放在主线程中进行操作。如果在子线程中有关于UI的操作,那么就需要把数据消息作为一个Message对象发送到消息队列中,然后,用Handler中的handlerMessge方法处理传过来的数据信息,并操作UI。
类sendMessage(Message msg)方法实现发送消息的操作。 在初始化Handler对象时重写的handleMessage方法来接收Messgae并进行相关操作。