Handler的三種互動場景
前些天有朋友問了我一個問題,他說他在面試平安的時候,面試官問了一個這樣的Question:Handler有哪三種互動場景?
其實,當我聽到這個問題的時候,我腦海中閃現的想法是面試官其實在考Handler在子執行緒的實現方式。沒錯,其實Handler的互動方式可以分為如下三種:
(1)子執行緒與子執行緒互動。
(2)主執行緒傳送訊息到子執行緒。
(3)子執行緒傳送訊息主執行緒。
乍一看,其實上面的(2)和(3)原理是差不多的,我們可以理解成是雙向的關係。
我之前寫過一篇從原始碼角度分析Handler的部落格,其中就分析到了為什麼我們可以在UI執行緒(也就是主執行緒)直接使用Handler傳送訊息。如果對這塊瞭解了,那麼今天的這三個問題就很容易。還沒有看的小夥伴點選這裡:玩轉Android Handler
下面的內容我會以程式碼的方式來分別和大家分析3種的實現方式。
(1)子執行緒與子執行緒互動
可能突然看這個問題,就有點無所適從。不過仔細想想,然後聯想主執行緒的Handler就很容易理解了。你可以把主執行緒也當做一個子執行緒,這樣想這個問題就迎刃而解了。這種情況同時也分為了如下兩種場景:
1>子執行緒中使用Handler向另一個子執行緒發訊息(單向)
即建立兩個執行緒,並在一個執行緒傳送訊息到另一個執行緒處理。程式碼很簡單,相信大家一看就懂。
2>兩個子執行緒互發訊息(雙向)
上面程式碼中,分別建立了兩個執行緒MyThread1和MyThread2的例項。並且通過各自執行緒的Handler向對方傳送訊息。
(2)主執行緒發訊息到子執行緒。
既然是主執行緒發訊息到子執行緒,那麼Handler的處理肯定是在子執行緒。那麼我們就需要在子執行緒中去建立Handler。還記得我們之前分析原始碼的時候我們說過,Handler的使用離不開Looper的支援。主執行緒可以使用Handler的原因是因為ActivityThread在建立的時候預設幫我們建立了Looper。即MainLooper。現在我們要在子執行緒中去建立Handler,那麼就需要我們手動去建立Looper。OK,看如下程式碼:
從上面程式碼可以看到,我們在子執行緒中建立了Looper。在主執行緒Button的單擊事件中去傳送訊息。子執行緒中接受到訊息後處理。相信大家一看便知。
其實還有一種實現方式,想必大家平時用的不是特別多,就是使用HandlerThread類來實現。
HandlerThread,顧名思義,可以簡單理解為一個Handler執行緒類。我們使用該類就可以建立一個Handler的執行緒類,然後將其和Handler繫結起來,然後Handler的處理就在該執行緒中執行了。同樣看程式碼就可以很清楚的明白其中的原理:
總之,記住一點就可以了。Handler的使用離不開Looper的支援,要想在子執行緒中使用Handler,Looper的建立必不可少。
第三個子執行緒傳送訊息到主執行緒就不再多說了,我們平時都在接觸。Ok,關於Handler的三種互動場景就介紹到這裡了,相信大家對Handler又有了新的認識。有問題的筒靴可以給我留言啦~
相關文章
- 桌面互動投影的使用場景有哪些?
- JS 與 OC 互動的三種方法JS
- Refresh Token的使用場景以及如何與JWT互動JWT
- 互動式推薦在外賣場景的探索與應用
- 社交場景下iOS訊息流互動層實踐iOS
- [ARKit]2-蘋果官方AR場景互動Demo解讀蘋果
- max場景瘦身,加快場景的開啟速度(多種方法)
- 室外內地面互動投影系統可應用的場景有哪些?
- SpringMVC 中 @ControllerAdvice 註解的三種使用場景!SpringMVCController
- 真香!盤點雲主機三種典型應用場景
- C#實現Winform間的資料互動的三種方法C#ORM
- redis常見的幾種使用場景Redis
- Laravel 5.7 以佇列方法傳送郵件(三種場景)Laravel佇列
- android客戶端與服務端互動的三種方式Android客戶端服務端
- Jan Ozer:高畫質直播互動場景下的硬編碼如何選型?
- python字串連線的三種方法及其效率、適用場景詳解Python字串
- 超全面的語音互動知識:從原理、場景到趨勢
- WebGL場景的兩種地面構造方法Web構造方法
- 事物系統的幾種異常場景
- Redis最常見的5種應用場景Redis
- 這種場景下的事務如何控制?
- 幾種場景的資料庫恢復資料庫
- mysql 聯合索引的兩種特殊場景MySql索引
- FutureTask的用法及兩種常用的使用場景
- [筆記]鎖:各種場景 整理筆記
- Disruptor適合這種場景嗎
- 基於RTS超低延時直播最佳化強互動場景體驗
- 三種雲原生儲存方案優缺點及應用場景分析
- 互動投影的幾種實現方式
- 5種JavaScript和CSS互動的方法JavaScriptCSS
- 使用代理IP的三個常見場景
- PHP 併發場景的幾種解決方案PHP
- MyBatis 中 @Param 註解的四種使用場景MyBatis
- Redis的11種Web應用場景簡介RedisWeb
- 【Mysql】mysqldump 匯出各種場景的應用MySql
- @Transactional 註解下,事務失效的多種場景
- DCM:一個能夠改善所有應用資料互動場景的中介軟體新秀
- 細數《Sizeable》中場景互動的夢境靈感