handler和asynctask都是為了android中的非同步處理方式,避免在子執行緒操作ui造成anr異常下面分別介紹
handler主要接收子執行緒傳送的資料,並用此資料配合主線程更新ui,用來跟ui主線程互動用。比如用hanlder傳送乙個message,然後在handler的執行緒中來接受、處理該訊息,以避免直接在ui主線程中處理事物導致影響ui異常,handler相當於是主線程和子執行緒的紐帶,還可以通過handler的延遲操作,傳送延時訊息。
handler常用方法:
post(runnable)
postattime(runnable,long)
postdelayed(runnable long)
sendemptymessage(int)
sendmessage(message)
sendmessageattime(message,long)
sendmessagedelayed(message,long )
建立handler接收物件
建立handler接收物件
handler hanlder = new handler()
};
在子執行緒中傳送訊息
new thread()
}.start();
message可以傳遞的引數有:
1.arg1 arg2整數型別,是setdata的低成本替代品。傳遞簡單型別
2.object型別obj
3.what使用者自定義的訊息**,這樣接收者可以了解這個訊息的資訊。每個handler各自包含自己的訊息**,所以不用擔心自定義的訊息跟其他handler有衝突
handler個成員間運作流程圖
handler在子執行緒中傳送message到messagequeue訊息佇列中,系統中存在乙個looper迴圈其,一直迴圈讀取messagequeue訊息佇列中的訊息,當有訊息時就會把訊息給ui現成handler處理。
asynctask想當時對handler+thread進行了一層封裝,更加簡單 快捷
要使用aynctask我們要提供三個泛型引數,並最少從在其中乙個
asynctask定義了三種泛型型別 params progress result
params 啟動任務執行的輸入引數 url等
progress 後台任務執行百分比
result 後台執行任務最終返回結果 比如string
執行非同步載入操作時需要重寫以下方法
oinbackground(params…) 後台執行,比較耗時的操作都可以放在這裡。注意這裡不能直接操作ui。此方法在後台執行緒執行,完成任務的主要工作,通常需要較長的時間。在執行過程中可以呼叫publicprogress(progress…)來更新任務的進度。
onpostexecute(result) 相當於handler 處理ui的方式,在這裡面可以使用在doinbackground 得到的結果處理操作ui。 此方法在主線程執行,任務執行的結果作為此方法的引數返回
有必要的話你還得重寫以下三個方法,但不是必須的
onprogressupdate(progress..) 可以使用進度條增加使用者體驗度,執行publicprogress時會呼叫progress…
onpreexecute() 這裡是終端使用者呼叫excute的介面,當任務執行之前開始呼叫此方法,可以在這裡顯示進度對話方塊
new asynctask()
@override
protected void onpostexecute(string data)
};
asynctask三個引數型別分表代表:如果沒有被使用,可以用void代替
啟動任務執行的輸入引數
後台任務執行的進度
後台計算結果的型別
define const enum的用法及區別
define,無參巨集定義的一般形式為 define 識別符號 字串 例 define max 10 define函式定義乙個常量。常量類似變數,不同之處在於 在設定以後,常量的值無法更改。常量值只能是字串或者數字。被定義為 巨集 的識別符號稱為 巨集名 在編譯處理時,對程式中所有出現的 巨集名 都...
define的用法及與typedef的區別
1 define 無引數巨集定義 用法 一般形式為 define 識別符號 字串 1 表示其為預處理命令,凡是以 開頭的都是預處理命令 define 為巨集定義命令 識別符號 為所定義的巨集名 字串 可以是常數 表示式 字串等。2 除了經常用到的如 define maxnum 100 之外,還有其它...
onMeasure onLayout用法,區別
1.onmeasure a.屬於view的方法,用來測量自己和內容的來確定寬度和高度 b.view的measure方法體中會呼叫onmeasure 2.onlayout a.屬於viewgroup的方法,用來為當前viewgroup的子元素的位置和大小 b.view的layout方法體中會呼叫onl...