HandlerThread 类的学习(转载)
HandlerThread繼承于Thread,所以它本質(zhì)就是個Thread。HandlerThread類用于方便的創(chuàng)建一個含有l(wèi)ooper的線程類,looper用來創(chuàng)建handler類。我們一般不創(chuàng)建looper對象,直接調(diào)用HandlerThread即可。HandlerThread本身實現(xiàn)了循環(huán)處理消息的功能,不用再直接調(diào)用Looper.prepare()和Looper.loop()方法。與普通Thread的差別就在于,它有個Looper成員變量。這個Looper其實就是對消息隊列以及隊列處理邏輯的封裝,簡單說就是消息隊列+消息循環(huán)。
?
使用HandlerThread步驟如下:
//步驟1:創(chuàng)新HandlerThread的一個對象,并開啟這個線程,HandlerThread將通過Looper來處理Handler對來中的消息,也就是如果發(fā)現(xiàn)Handler中有消息,將在HandlerThread這個線程中進(jìn)行處理。
HandlerThread?ht?=?new?HandlerThread(“hander_thread”);
//步驟2:啟動handerhandler這個線程;
ht.start();
//步驟3:創(chuàng)建handler中,帶上Looper的參數(shù),即handlerThread.getLooper()。注意,此處理必須在HandlerThread啟動后才能調(diào)用,否則會報錯?,getLooper()會返回null,則程序異常出錯
Handler handler = new Handler(ht.getLooper()){
….
public void handleMessage(Message msg){
… …????/*這里的處理,將不在主線程中執(zhí)行,而在HandlerThread線程中執(zhí)行,可以通過Thread.currentThread().getId()或者Thread.currentThread().getName()來確定*/
}
};
常用方法:
- public Looper getLooper():這個方法返回與此線程相關(guān)的Looper。如果該線程不能啟動或是由于某種原因isAlive()方法返回false,則這個方法返回null,假如這個線程已經(jīng)啟動,那么此方法將阻塞,直到looper被初始化。
- public int getThreadId():返回線程的標(biāo)志。
轉(zhuǎn)載于:https://www.cnblogs.com/porter/p/3142454.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的HandlerThread 类的学习(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UITableViewCell 取消选中
- 下一篇: Axis --SOAP引擎