Handler AsyncTask用法及區別

2021-07-14 22:35:45 字數 1906 閱讀 9436

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...