Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper
異步消息處理機(jī)制解析
? Android中的異步消息處理主要有四個(gè)部分組成,Message、Handler、MessageQueue和Looper。
1、Message
Message是在線程之間傳遞的消息,它可以在內(nèi)部攜帶少量的信息,用于在不同線程之間交換數(shù)據(jù)。上個(gè)例子中就使用了Message的what字段,除此之外還可以使用arg1和arg2字段來攜帶一些整形數(shù)據(jù),使用obj字段攜帶一個(gè)Object對象。
2、Handler
Handler顧名思義也就是處理者的意思,它主要是用于發(fā)送和處理消息的。發(fā)送消息一般是使用Handler的sendMessage()方法,而發(fā)出的消息經(jīng)過一系列地輾轉(zhuǎn)處理后,最終會(huì)傳遞到Handler的handleMessage()方法中。
3、MessageQueue
MessageQueue是消息隊(duì)列的意思,它主要用于存放所有通過Handler發(fā)送的消息。這部分消息會(huì)一直存在于消息隊(duì)列中,等待被處理。每個(gè)線程中只會(huì)有一個(gè)MessageQueue對象。
4、Looper
Looper是每個(gè)線程中的MessageQueue的管家,調(diào)用Looper的loop()方法后,就會(huì)進(jìn)入到一個(gè)無限循環(huán)當(dāng)中,然后每當(dāng)發(fā)現(xiàn)MessageQueue中存在一條消息,就會(huì)將它取出,并傳遞到Handler的handleMessage()方法中。每個(gè)線程中也只會(huì)有一個(gè)Looper對象。
?
了解了Message、Handler、MessageQueue以及Looper的基本概念后,我們再來對異步消息處理的整個(gè)流程梳理一遍。首先需要在主線程中創(chuàng)建一個(gè)Handler對象,并重寫handleMessage()方法。然后當(dāng)子線程中需要進(jìn)行UI操作時(shí),就創(chuàng)建一個(gè)Message對象,并通過Handler將這條消息發(fā)送出去。之后這條消息會(huì)被添加到MessageQueue的隊(duì)列中等待被處理,而Looper則會(huì)一直嘗試從MessageQueue中取出待處理消息,最后分發(fā)回Handler的handleMessage()方法中。由于Handler是在主線程中創(chuàng)建的,所以此時(shí)handleMessage()方法中的代碼也會(huì)在主線程中運(yùn)行,于是我們在這里就可以安心的進(jìn)行UI操作了。
?
?
下面這幾個(gè)博客寫的也不錯(cuò),推薦下,有空再深入的總結(jié)一下
http://blog.csdn.net/a254373829/article/details/6933027
http://blog.csdn.net/nanzhiwen666/article/details/8292981
http://www.cnblogs.com/shirley-1019/p/3557800.html
http://www.cnblogs.com/net168/p/4082217.html
轉(zhuǎn)載于:https://www.cnblogs.com/longjunhao/p/4234541.html
總結(jié)
以上是生活随笔為你收集整理的Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MarkDown安装后不能预览问题(aw
- 下一篇: python代码在哪里写_python的