您的位置:首页 > 产品设计 > UI/UE

Handler,Message,MessageQueue,Looper之间的相爱相杀

2016-04-21 14:09 447 查看
Handler中含有Looper和MessageQueue的引用,对应关系皆为1:1,一个Handler中只拥有与之对应的一个Looper或者MessageQueue。

Looper中包含一个MessageQueue和一个Thread,对应关系为1:1

MessageQueue是一个链表结构,用来存储Message对象.对应关系为1:N

Message中对应一个Handler对象,一般为msg.target =this ,由Handler发送消息时进行赋值,对应关系为1:1

Handler机制:

子线程通过获取Handler对象,让对象将数据发送给主线程的MessageQueue中,然后主线程中的Looper通过loop()方法不断的从消息队列中取出对象交给与之对应的Handler

进行处理。

非UI线程使用:

一个普通的线程是不包含Looper的,因此在非主线程中调用Handler对象发送消息的时候我们必须先调用Looper.prepare()方法,变成一个LooperThread对象,另外不可调用两次,否则产生异常,并且别忘了在最后调用Looper.loop()方法。

Message:

Android默认提供了一个消息池让我们获取Message对象,可直接使用Message.obtain()方法从消息池中获取一个Message对象,节约资源。

MessageQueue:

equeueMessage()方法将消息加入队列

next() 读取下一条消息

removeMessage() 删除消息

quit() 退出

注意:一般情况下为了不引起不必要的内存泄露,我们在Activity的onStop()方法中调用removeCallbacksAndMessage()方法清除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: