Android多執行緒之常見的執行緒形態

2021-09-20 02:15:15 字數 2122 閱讀 1715

andorid中的執行緒除了傳統的thread外,主要還有asynctask、handlerthread、intentservice。

asynctask

asynctask是一種輕量的非同步任務類,不僅可以在後台執行任務,還能把執行的進度和最終的結果傳遞給ui執行緒以便更新ui。asynctask底層是封裝了thread和handler。asynctask不適合執行特別耗時的任務,這種情況下還是推薦用執行緒池來處理

asynctask必須在主線程中載入,這意味著第一次訪問asynctask必須發生在主線程。android4.1及以上的版本中已經在activitythread的main方法中自動完成了

asynctask物件必須在主線程中建立

asynctask的execute方法必須在ui執行緒呼叫

不要在程式中直接呼叫onpreexecute、doinbackground、onprogressupdate、onpostexecute方法

乙個asynctask物件只能執行一次,只能呼叫一次execute方法,否則會報illegalstateexception異常

預設情況下asynctask是序列執行的

handlerthread

public class handlerthread extends thread 

public handlerthread(string name, int priority)

//用來重寫,在開啟訊息迴圈之前被呼叫

protected void onlooperprepared()

//主要的地方在這個run方法

@override

public void run()

process.setthreadpriority(mpriority);

onlooperprepared();

//開啟訊息迴圈

looper.loop();

mtid = -1;

}public looper getlooper()

// if the thread has been started, wait until the looper has been created.

synchronized (this) catch (interruptedexception e) }}

return mlooper;

}//用於停止訊息迴圈

public boolean quit()

return false;

}//用於停止訊息迴圈

public boolean quitsafely()

return false;

}public int getthreadid()

intentservice
public abstract class intentservice extends service 

@override

public void handlemessage(message msg)

}public intentservice(string name)

public void setintentredelivery(boolean enabled)

//第一次啟動時會呼叫oncreate

@override

public void oncreate()

@override

public void onstart(@nullable intent intent, int startid)

@override

public int onstartcommand(@nullable intent intent, int flags, int startid)

@override

public void ondestroy()

@override

@nullable

public ibinder onbind(intent intent)

@workerthread

protected abstract void onhandleintent(@nullable intent intent);

}

Android 多執行緒之Handler

前言 android的訊息傳遞機制是另外一種形式的 事件處理 這種機制主要是為了解決android應用中多執行緒的問題 在android中不允許activity新啟動的執行緒訪問該activity裡的ui元件,handler handler,它直接繼承自object,乙個handler允許傳送和處理...

Android 多執行緒之Looper

前言 handler messagequeue looper三者間的關係如圖 從上圖可以看出,handler傳送執行緒訊息到當前執行緒的messagequeue中,而looper用來管理messagequeue,它從messagequeue中取到訊息交給handler處理。looper 在activ...

Android多執行緒之IntentService

1.intentservice繼承自service public abstract class intentservice extends service override public void handlemessage message msg public intentservice stri...