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