Handler类主要作用有两个:

1. 在新启动的线程中发送消息

2. 在主线程中获取、处理消息

  handler实例都是与一个线程和该线程的消息队列一起使用,一旦创建了一个新的handler实例,系统就把该实例与一个线程和该线程的消息队列捆绑起来,这将可以发送消息和runnable对象给该消息队列,并在消息队列出口处处理它们。

  时间类消息通过如下方法使用:

post(Runnable), 
  postAtTime(Runnable, long), 
  postDelayed(Runnable, long), 
  sendEmptyMessage(int), 
  sendMessage(Message), 
  sendMessageAtTime(Message, long),  
  sendMessageDelayed(Message, long)


  methods. post之类函数可以传输一个runnable对象给消息队列,并在到达消息队列后被调用。sendmessage之类函数可以传送一个包含数据的message对象,该message对象可以被Handler类的handleMessage(Message) 方法所处理。

  post之类函数和sendmessage之类的函数都可以指定消息的执行时机,是立即执行、稍后一段时间执行,还是在某个确定时刻执行。这可以用来实现超时、消息或其他时间相关的操作。

 

  在主线程中创建的handler实例与该线程和该线程的消息队列进行绑定,而新创建的线程只是发送UI更新指令,真正更新UI的还是在主线程中进行完成。

 

  Handler在android里负责发送和处理消息。它的主要用途有:



  1)按计划发送消息或执行某个Runnanble(使用POST方法);



  2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)



Handler( Looper looper)、 Handler( Looper looper,  Handler.Callback callback)可以指定线程),同时一个消息队列可以被当前线程中的多个对象进行分发、处理(在UI线程中,系统已经有一个Activity来处理了,你可以再起若干个Handler来处理)。在实例化Handler的时候,Looper可以是任意线程的,只要有Handler的指针,任何线程也都可以sendMessage。Handler对于Message的处理不是并发的。一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送Message(通过sendMessges方法),然后由handleMessage()更新UI)。




  handler和looper开发必读:http://www.android123.com.cn/androidkaifa/422.html