AsyncTask 和Handler 的優缺點比較

2021-07-07 05:17:53 字數 1823 閱讀 5590

asynctask 實現的原理和優缺點:

優點: 快捷  方便

缺點: 當執行多個後台任務,和並需要ui 變更起來就比較複雜

handler 實現的原理和優缺點:

優點: 簡單 清晰

缺點:當執行單個後台任務,顯得**過多,結構複雜(相對性)

asynctask 介紹

android 的asynctask 比handler 更輕量級一些(只是在**上,而實際上要比handler更耗資源)適用於簡單的非同步操作,  asynctask 就是乙個封裝或的後台非同步任務類。 繼承與 object 類。要使用asynctask 工作,提供了3個泛型引數和並過載方法幾個方法

asynctask定義了3中泛型型別  params ,progress , result.

params  啟動任務執行的輸入引數,比如http 的url.

progress 是 顯示任務執行的百分比。

result  是後台任務執行返回的結果。如 string.

使用asyntask 非同步任務類要重寫的方法

doingbackground(params) 後台執行任務,比較耗時的操作都放到這裡,注意這裡不能直接操作ui. 操作完後呼叫

public progress(progress)來更新任務進度。

onpostexcut(result)  此方法執行在主線程中,任務執行結果 作為此方法的引數返回。得以作為此方法的相當於handler處理ui 的方式。在這裡直接可以使用 doingbackground 處理的結果來更新ui。

有必要的話,還需要重寫以下3個方法:

onprogressupdate(progress),  使用進度條來增加使用者的體驗度,此方法執行在主線程中,使用者顯示任務執行的進         度。

onpreexecute   這裡是使用者最終呼叫 execute 時的介面,當任務執行之前開始呼叫此方法,可以在這裡顯示進度對話方塊。

oncancelled()  使用者呼叫取消,要做的操作。

使用asncytask 一下是需要注意的哦:

task 必須在ui thread中建立

execute 必須在 ui thread 中呼叫。

不要手動的呼叫onpreexecute(), onpostexecute(result),doinbackground(params...), onprogressupdate(progress...)這幾個方法;

該task  只能被執行一次,若多次呼叫會出現異常。

handler 介紹:

handler 主要接收子執行緒傳遞過來的資料,並且用此資料配合執行緒更新ui。

handler 執行在主線程,它與子執行緒是通過message 物件來傳遞資料的,這個時候handlder就接受著從子執行緒傳遞過來的資料(子執行緒用sendmessage())方法來傳遞 message物件,把這些訊息放到主線程,配合主線程更新ui.

handler 和分發 message物件和runnable物件到主線程中,每個handler例項都會繫結到它建立的執行緒。

handler中分發訊息的一些方法:

post (runnable)

postattime(runnable,long)

postdelayed(runnable,long)

sendemptymessage(int)

sendmessageattime(message ,long)

sendmessagedelayed(message,long)

總結: 資料簡單使用 asynctask **實現簡單。資料量多且複雜使用  handler+ thread 想比較asynctack 來說能更好的利用系統資源且高效。

Android中的Timer和Handler的使用

timer timer主要用於執行一次性任務或者按照某個時間間隔迴圈執行某個任務,但對於迴圈執行來說,又分為兩種情況。第一種是fixed period execution,呼叫schedule timertask,delay,period 方法即可,這種迴圈執行任務的特點是,下一次執行的開始時間是從...

AsyncTask和Handler非同步實現比較

一 asynctask asynctask是android提供的輕量級的非同步類,可以直接繼承asynctask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度 可以通過介面實現ui進度更新 最後反饋執行的結果給ui主線程。優點 簡單 快捷 過程可控。缺點 在使用多個非同步操作和並需要進行...

怎樣停止AsyncTask和Thread

從外部呼叫asynctask的cancel方法並不能停止乙個已經啟動的asynctask。這個cancel方法的作用與執行緒的interrupt方法相似,呼叫了乙個執行緒的interrupt方法之後執行緒仍然執行,但是如果該執行緒的run方法裡面呼叫過sleep的或者wait方法後,處於sleep或...