當前位置:編程學習大全網 - 行動軟體 - HandlerThread原理與應用

HandlerThread原理與應用

在理解了Handler的原理之後,我們知道在壹個子線程中創建壹個Handler不能缺少了Looper.prepare()和Looper.loop()兩個方法,具體的原因這裏不再贅述,不熟悉原理的可以先看下另壹篇文章 Handler的原理解析 .

本篇文章主要是講解HandlerThread的使用的。

?首先HandlerThread是繼承於Thread類的,所以本質上HandlerThread就是壹個線程,接下來就詳細的去看壹看,這是怎樣的壹個線程?

?首先,先看下它的構造函數:

?既然是線程,那麽最重要的當然是run方法來,看完了run方法,相信妳也就明白HandlerThread的用途了!

?怎麽樣,這是不是和我們之前在子線程中創建Handler壹樣,首先是Looper.prepare(),接著是new Handler(), 最後是Looper.loop()。等等,這裏並沒有創建Handler啊!別急,我們先壹步壹步地看看run方法再說為什麽沒有創建Handler。

?通過查找發現到壹個getLooper()的方法,該方法返回了當前線程的mLooper對象,還記得Looper是在哪裏進行賦值的嗎?在線程的run方法裏,所以當線程啟動之後才能創建Looper並賦值給mLooper,這裏的阻塞就是為了等待Looper的創建成功。同時該方法是用Public修飾的,說明該方法是提供外部調用的,Looper創建成功提供給外部使用。

?最後在對象銷毀前,調用下面的方法退出Looper循環

?quit方法實際是調用MessagQueue的removeAllMessagesLocked,移除所有延遲和非延遲的消息,

?quitSafely方法調用的是removeAllFutureMessagesLocked方法,該方法只清除延遲的消息,非延遲的消息

還是會進行分發處理。

?HandlerThread分析完啦,是不是有點蒙,自始至終都沒有出現Handler,HandlerThread要怎麽用呢?

?下面我們就通過壹個Demo來說明下HandlerThread是怎麽用的?

  • 上一篇:90後小時候看的港劇,求劇名。
  • 下一篇:激光劃片機的國內外發展狀況
  • copyright 2024編程學習大全網