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