1.Handler允许你发送和处理关联着一个线程的消息队列的Message和Runnable对象。每一个Handler实例和一个单一的线程和这个线程的消息队列相关连。当它被创建时,它和线程,消息队列绑定了,它可以传递Message和Runnable对象到消息队列,然后执行他们,最后出队列。
2.Handler主要在两种情况下使用(1)安排Message和Runnable在未来某个时间执行。(2)将一个准备在不同于你的主线程的线程执行的动作入队。
3.安排线程主要用这些方法完成的:post(Runnable),
postAtTime(Runnable, long),
postDelayed(Runnable, long),
sendEmptyMessage(int),
sendMessage(Message),
sendMessageAtTime(Message, long),
sendMessageDelayed(Message, long)
post版的方法允许将Runnable Objects入队,Runnable Objects将在消息队列接收它们的时候被调用。sendMessage版方法允许将含有数据的Message Objects入队,这些Message Objects将被Handler的handleMessage(Message)处理(要求继承Handler),并且只要Handler对象以主线程的Looper创建,那么调用Handler的sendMessage等接口,将会把消息放入队列都将是放入主线程的消息队列。并且将会在Handler主线程中调用该handler的handleMessage接口来处理消息。
4。内部接口Handler.Callback
/**
* Callback interface you can use when instantiating a Handler to avoid
* having to implement your own subclass of Handler.
*/
public interface Callback {
public boolean handleMessage(Message msg);
}
5.构造方法:
①:Handler()缺省构造方法,和当前线程的消息队列关联。
②:Handler(Handler.Callback callback)和当前消息队列关联,使用自己定制的实现callback接口的类来处理Message。
③:Handler(Looper looper)使用特定的队列。
④:Handler(Looper looper,Handler.Callback callback)使用特定的消息队列和自己的定制的实现Callback接口的类来处理Message。
6.Message:含有任意数据对象,能被发送到Handler。创建Message对象时推荐不要使用缺省构造方法,最好的方法是使用Message.obtain()或者Handler.obtainMessage()来获得Message对象,这些方法会从消息池中获得Message对象。
7.Message的常用实例域:int what用于区分Message,int arg1,int ag2(开销会比setData()),Object obj存储数据。Message 重要方法:obtain()从消息池中获得Message对象,setToTarget()将消息发送给特定的Handler对象,setTarget(Handler handler)绑定特定的Handler。
8.Looper:用于为一个线程运行消息循环的类,线程缺省是没有消息循环的,可以通过在线程中调用prepare()方法来获得,然后用loop()让他处理消息,知道循环结束。Looper和Hander配合使用,在API中的示例:
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg){
// process incoming messages here
}
};
Looper.loop();
}
}
9.Looper的构造方法是private的,所以我们不能自己创建Looper对象,但是有HandlerThread类,通过创建HandlerThread对象并start,我们可以来获得Looper对象,进而传给Handler构造方法,这样我们可以在主线程外的线程使用Handler来处理事务了。
分享到:
相关推荐
安卓Android源码——HandlerLooper1.rar
安卓Android源码——HandlerMessage1.rar
安卓Android源码——HandlerLooper2.rar
安卓Android源码——HandlerMessage3.rar
安卓Android源码——HandlerMessage2.rar
消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理,在单线程模型下,为了线程通信问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该Message Queue并结合Handler和Looper组件...
在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message和post runnable之间的同步机制。所以在按...
android源码中包含了...android的消息处理有三个核心类: Looper,Handler和Message。 其实还有一个Message Queue(消息队列) , 但是MQ被封装到Looper里面了, 我们不会直接与 MQ打交道, 因此我没将其作为核心类。
Handler+Looper+MessageQueue
Android ,Handler,Looper,Message
handler与looper及messagequeue的简单总结
熟悉Windows编程的朋友可能知道Windows程序是消息驱动的,并且有全局的消息循环系统。而Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制。实际上谷歌参考了Windows的...Android通过Looper、Handler来
Android应用源码之HandlerMessage1_HandlerMessage
通过自定义Handler、Looper、Message.浅析Android线程间通信原理
在上一篇文章《Android应用程序消息处理机制(Looper、Handler)分析》中,我们分析了Android应用程序的消息处理机制,本文将结合这种消息处理机制来详细分析Android应用程序是如何获得键盘按键消息的。
Android应用源码之HandlerLooper1.zip项目安卓应用源码下载Android应用源码之HandlerLooper1.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
Android 异步处理 Handler+Looper+MessageQueue深入详解
Message,MessageQueue,Looper,Handler详解
Handler,Looper和Message的理解和练习
Android Handler Looper