Android多線程:這是一份全面 & 詳細(xì)的HandlerThread學(xué)習(xí)指南


前言

  • 多線程的應(yīng)用在Android開發(fā)中是非常常見的,常用方法主要有:

    1. 繼承Thread類
    2. 實(shí)現(xiàn)Runnable接口
    3. Handler
    4. HandlerThread
    5. AsyncTask
  • 今天,我將獻(xiàn)上一份全面 & 詳細(xì)的HandlerThread機(jī)制的學(xué)習(xí)指南,內(nèi)容包括:定性認(rèn)知、定量使用、工作原理 & 源碼分析,希望你們會喜歡。

Carson帶你學(xué)多線程系列
基礎(chǔ)匯總
Android多線程:基礎(chǔ)知識匯總
基礎(chǔ)使用
Android多線程:繼承Thread類使用(含實(shí)例教程)
Android多線程:實(shí)現(xiàn)Runnable接口使用(含實(shí)例教程)
復(fù)合使用
Android 多線程:AsyncTask使用教程(含實(shí)例講解)
Android 多線程:AsyncTask原理及源碼分析
Android多線程:HandlerThread使用教程(含實(shí)例講解)
Android多線程:HandlerThread原理及源碼分析
Android多線程:IntentService使用教程(含實(shí)例講解)
Android多線程:IntentService的原理及源碼分析
Android多線程:線程池ThreadPool全方位教學(xué)
相關(guān)使用
Android異步通信:這是一份全面&詳細(xì)的Handler機(jī)制學(xué)習(xí)攻略
Android多線程:手把手教你全面學(xué)習(xí)神秘的Synchronized關(guān)鍵字
Android多線程:帶你了解神秘的線程變量 ThreadLocal


目錄

示意圖

1. 定義

一個Android 已封裝好的輕量級異步通信類


2. 作用

  1. 實(shí)現(xiàn)多線程
    在工作線程中執(zhí)行任務(wù),如 耗時任務(wù)
  2. 異步通信、消息傳遞
    實(shí)現(xiàn)工作線程 & 主線程(UI線程)之間的通信,即:將工作線程的執(zhí)行結(jié)果傳遞給主線程,從而在主線程中執(zhí)行相關(guān)的UI操作

從而保證線程安全


3. 優(yōu)點(diǎn)

方便實(shí)現(xiàn)異步通信,即不需使用 “任務(wù)線程(如繼承Thread類) + Handler”的復(fù)雜組合

實(shí)際上,HandlerThread本質(zhì)上是通過繼承Thread類封裝Handler類的使用,從而使得創(chuàng)建新線程和與其他線程進(jìn)行通信變得更加方便易用


4. 工作原理

內(nèi)部原理 = Thread類 + Handler類機(jī)制,即:

  • 通過繼承Thread類,快速地創(chuàng)建1個帶有Looper對象的新工作線程
  • 通過封裝Handler類,快速創(chuàng)建Handler & 與其他線程進(jìn)行通信

5. 具體使用

  • HandlerThread的本質(zhì):繼承Thread類 & 封裝Handler
  • HandlerThread的使用步驟分為5步
// 步驟1:創(chuàng)建HandlerThread實(shí)例對象
// 傳入?yún)?shù) = 線程名字,作用 = 標(biāo)記該線程
   HandlerThread mHandlerThread = new HandlerThread("handlerThread");

// 步驟2:啟動線程
   mHandlerThread.start();

// 步驟3:創(chuàng)建工作線程Handler & 復(fù)寫handleMessage()
// 作用:關(guān)聯(lián)HandlerThread的Looper對象、實(shí)現(xiàn)消息處理操作 & 與其他線程進(jìn)行通信
// 注:消息處理操作(HandlerMessage())的執(zhí)行線程 = mHandlerThread所創(chuàng)建的工作線程中執(zhí)行
  Handler workHandler = new Handler( mHandlerThread.getLooper() ) {
            @Override
            public boolean handleMessage(Message msg) {
                ...//消息處理
                return true;
            }
        });

// 步驟4:使用工作線程Handler向工作線程的消息隊(duì)列發(fā)送消息
// 在工作線程中,當(dāng)消息循環(huán)時取出對應(yīng)消息 & 在工作線程執(zhí)行相關(guān)操作
  // a. 定義要發(fā)送的消息
  Message msg = Message.obtain();
  msg.what = 2; //消息的標(biāo)識
  msg.obj = "B"; // 消息的存放
  // b. 通過Handler發(fā)送消息到其綁定的消息隊(duì)列
  workHandler.sendMessage(msg);

// 步驟5:結(jié)束線程,即停止線程的消息循環(huán)
  mHandlerThread.quit();

6. 源碼分析


7. 總結(jié)

  • 本文全面介紹了多線程 HandlerThread,包括定性認(rèn)知、具體使用、工作原理、源碼分析等等
  • 下一篇文章我將對講解Android多線程的相關(guān)知識,感興趣的同學(xué)可以繼續(xù)關(guān)注Carson_Ho的簡書

Carson帶你學(xué)多線程系列
基礎(chǔ)匯總
Android多線程:基礎(chǔ)知識匯總
基礎(chǔ)使用
Android多線程:繼承Thread類使用(含實(shí)例教程)
Android多線程:實(shí)現(xiàn)Runnable接口使用(含實(shí)例教程)
復(fù)合使用
Android 多線程:AsyncTask使用教程(含實(shí)例講解)
Android 多線程:AsyncTask原理及源碼分析
Android多線程:HandlerThread使用教程(含實(shí)例講解)
Android多線程:HandlerThread原理及源碼分析
Android多線程:IntentService使用教程(含實(shí)例講解)
Android多線程:IntentService的原理及源碼分析
Android多線程:線程池ThreadPool全方位教學(xué)
相關(guān)使用
Android異步通信:這是一份全面&詳細(xì)的Handler機(jī)制學(xué)習(xí)攻略
Android多線程:手把手教你全面學(xué)習(xí)神秘的Synchronized關(guān)鍵字
Android多線程:帶你了解神秘的線程變量 ThreadLocal


歡迎關(guān)注Carson_Ho的簡書

不定期分享關(guān)于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度。


請點(diǎn)贊!因?yàn)槟愕墓膭钍俏覍懽鞯淖畲髣恿Γ?/h1>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容