Android学习之路——1.Handler,Message,Looper简介

[size=medium][b]1.Handler允许你发送和处理关联着一个线程的消息队列的Message和Runnable对象。每一个Handler实例和一个单一的线程和这个线程的消息队列相关连。当它被创建时,它和线程,消息队列绑定了,它可以传递Message和Runnable对象到消息队列,然后执行他们,最后出队列。

2.Handler主要在两种情况下使用(1)安排Message和Runnable在未来某个时间执行。(2)将一个准备在不同于你的主线程的线程执行的动作入队。

3.安排线程主要用这些方法完成的:[/b][/size]
post(Runnable),
postAtTime(Runnable, long),
postDelayed(Runnable, long),
sendEmptyMessage(int),
sendMessage(Message),
sendMessageAtTime(Message, long),
sendMessageDelayed(Message, long)
[size=medium][b]post版的方法允许将Runnable Objects入队,Runnable Objects将在消息队列接收它们的时候被调用。sendMessage版方法允许将含有数据的Message Objects入队,这些Message Objects将被Handler的handleMessage(Message)处理(要求继承Handler),并且只要Handler对象以主线程的Looper创建,那么调用Handler的sendMessage等接口,将会把消息放入队列都将是放入主线程的消息队列。并且将会在Handler主线程中调用该handler的handleMessage接口来处理消息。

4。内部接口Handler.Callback[/b][/size]
 /**
* 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);
}

[size=medium][b]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中的示例:[/b][/size]
 
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();
}
}

[size=medium][b]9.Looper的构造方法是private的,所以我们不能自己创建Looper对象,但是有HandlerThread类,通过创建HandlerThread对象并start,我们可以来获得Looper对象,进而传给Handler构造方法,这样我们可以在主线程外的线程使用Handler来处理事务了。[/b][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值