???????????????????????????????????????????????????????Handler
Handler是什么:可以說是個中間媒介弛槐,為雙方傳遞消息
Handler主要用于異步消息的處理:當發(fā)出一個消息之后懊亡,首先進入一個消息隊列,發(fā)送消息的函數(shù)即刻返回乎串,而另外一個部分在消息隊列中逐一將消息取出店枣,然后對消息進行處理,也就是發(fā)送消息和接收消息不是同步的處理叹誉。 這種機制通常用來處理相對耗時比較長的操作鸯两。
在安卓開發(fā)中通常用于主線程和子線程之間的通信,由于主線程不能做耗時操作长豁,而子線程不能更新UI控件钧唐,所以要用到handler來為二者提供橋梁。
通過Message與Handler進行通信的步驟是:
1. 重寫Handler的handleMessage方法匠襟,根據(jù)Message的what值進行不同的處理操作
2. 創(chuàng)建Message對象
雖然Message的構(gòu)造函數(shù)式public的,我們還可以通過Message.obtain()或Handler.obtainMessage()來獲得一個Message對象(Handler.obtainMessage()內(nèi)部其實調(diào)用了Message.obtain())钝侠。
3. 設(shè)置Message的what值
Message.what是我們自定義的一個Message的識別碼,以便于在Handler的handleMessage方法中根據(jù)what識別出不同的Message酸舍,以便我們做出不同的處理操作机错。
4. 設(shè)置Message的所攜帶的數(shù)據(jù),簡單數(shù)據(jù)可以通過兩個int類型的field arg1和arg2來賦值父腕,并可以在handleMessage中讀取弱匪。
5. 如果Message需要攜帶復雜的數(shù)據(jù),那么可以設(shè)置Message的obj字段,obj是Object類型萧诫,可以賦予任意類型的數(shù)據(jù)斥难。或者可以通過調(diào)用Message的setData方法賦值Bundle類型的數(shù)據(jù)帘饶,可以通過getData方法獲取該Bundle數(shù)據(jù)哑诊。
6. 我們通過Handler.sendMessage(Message)方法將Message傳入Handler中讓其在handleMessage中對其進行處理。?