您的位置:首页 > 其它

handler消息机制 小结

2016-05-10 20:51 155 查看
一、为什么要用Handle这样的机制:

因为在Android系统中UI操作并不是线程安全的,如果多个线程并发的去操作同一个组件,

可能导致线程安全问题。

为了解决这一个问题,android制定了一条规则:只允许UI线程来修改UI组件的属

性等,如果在UI界面进行一个耗时的操作。就会出现ANR异常。

这些耗时操作要写在一个子线程里。这时候就需要线程间的通信。

而线程间的通信是通过消息机制实现的。

二、消息机制中几个比较重要的角色

1.Message:

Message:消息的载体,用于表示消息的内容

2.Handler:消息的发送者,和消息的处理者

3.Looper:

主要负责消息机制的运转,他就是在不停的接受消息,然后分发消息。

4.MessageQueue:

消息队列

是用来存放消息的

-------------

要发送消息,首先要有消息。

如何创建消息的对象:

Message msg = Message.obtain();

在消息中封装信息

msg.what=0;

msg.arg1=2;

handler.sendMessage(msg);

-----------------

上面两句可以写成一句:

Message msg = Message.obtain(h,what,arg1,arg2);

Message msg = Message.obtain(handler,0,2);

msg.sendToTarget();

-----------------

另一种创建消息对象的方法

通过Handler对象的obtainMessage()获取消息对象,这个方法实际上也是通过Message的obtain()

方法实现的。

Message msg = handler.obtainMessage(what, arg1, arg2, obj)

handler.sendMessage(msg);

-------------------------------

处理消息的时候,写一个类继承Handler这个类,重写方法

public void handleMessage(Message msg){

}

----------------------------------

三、Handler执行的过程

Android启动时,会创建一个主线程,主线程初始化第一个Handler时,会创建Looper.

Looper是与主线程一一对应的,每个线程只有一个Looper。系统会默认初始化一个Looper

对象,负责管理MessageQueue.

Handler在工作线程发送消息的时候,Looper会接受这个消息。这个消息会放在消息队列里。

然后Looper又会分发这个消息。UI线程接受到Looper分发的消息,然后在handlerMessage(Message msg)

这个方法里,处理消息。

这个过程就是发送消息,接受消息的过程。

--------------Android菜鸟的浅显理解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: