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()
intentservicepublic 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...