Android中的handler
這幾天經常在開發android的時候需要用到多執行緒,其實很多地方是必須用到的,比如進度條的更新,動畫的顯示,等等,你必須開一個執行緒來單獨管理這些介面元素的變化,因為你不能因為更新個進度條把主執行緒給阻塞了,這不科學。而且別人都說了,永遠不要阻塞主執行緒,一切從使用者的角度出發。那麼今天我在寫多執行緒的時候,需要更新進度條的progress,那麼就需要在run方法中不斷的屈更新progress這個值,然後再對這個進度條setprogress,怎麼半呢?我的進度條是一個區域性變數,於是我自己定義了一個內部類,把這個進度條物件當作建構函式的引數傳入執行緒類中,然後再在run方法中更新這個progress。然後我直接new了一個物件,然後start了
接下來執行,便丟擲了異常,Only the original thread that created a view hierarchy can touch its views
為什麼呢?
ActivityThread從main方法開始執行,呼叫一個方法建立MessageQueue,
然後建立一個ActivityThread物件,在初始化程式碼中會建立一個Handler和一個Binder,binder負責接受呼叫,然後通過handler將呼叫傳送給訊息佇列,
主執行緒會非同步地從訊息佇列中取出訊息並執行相應的動作。
Handler的官方描述:
A Handler allows you to send and process Message
and
Runnable objects associated with a thread's MessageQueue
.
Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables
to that message queue and execute them as they come out of the message queue
.Handler的使用場合:
1、 to schedule messages and runnables to be executed as some point in the future;
安排messages和runnables在將來的某個時間點執行。
2、 to enqueue an action to be performed on a different thread than your own.
將action入隊以備在一個不同的執行緒中執行。即可以實現執行緒間通訊。比如當你建立子執行緒時,你可以再你的子執行緒中拿到父執行緒中建立的Handler物件,就可以通過該物件向父執行緒的訊息佇列傳送訊息了。由於Android要求在UI執行緒中更新介面,因此,可以通過該方法在其它執行緒中更新介面。
通過Handler更新UI例項:
步驟:
1、建立Handler物件(此處建立於主執行緒中便於更新UI)。
2、構建Runnable物件,在Runnable中更新介面。
3、在子執行緒的run方法中向UI執行緒post,runnable物件來更新UI。
相關文章
- Android中HandlerAndroid
- Android中Handler的正確使用Android
- Android中handler問題彙總Android
- Android中handler倒數計時Android
- Android Handler原理Android
- Android Handler機制之Handler 、MessageQueue 、LooperAndroidOOP
- Android學習-HandlerAndroid
- Android Handler 原始碼探索Android原始碼
- Android Handler 原始碼解析Android原始碼
- Android 基礎之 HandlerAndroid
- Android的Handler訊息機制 解析Android
- Android訊息機制HandlerAndroid
- Android 8.1 Handler 原始碼解析Android原始碼
- Android學習筆記·HandlerAndroid筆記
- android訊息機制—HandlerAndroid
- Android Handler機制之ThreadLocalAndroidthread
- Android Handler面試總結Android面試
- Android 進階 ———— Handler系列之建立子執行緒HandlerAndroid執行緒
- 移動架構 (二) Android 中 Handler 架構分析,並實現自己簡易版本 Handler 框架架構Android框架
- Android原始碼學習之handlerAndroid原始碼
- Android Handler與Looper原理簡析AndroidOOP
- 2018.03.06 Android Handler學習筆記Android筆記
- Android訊息機制Handler用法Android
- android Handler導致的記憶體洩露Android記憶體洩露
- Android 原始碼分析(二)handler 機制Android原始碼
- Android進階知識:Handler相關Android
- Android Handler機制之總目錄Android
- Android Handler 訊息機制詳述Android
- Android Handler機制之Message的傳送與取出Android
- Android解惑之Handler為什麼需要是static的Android
- 關於http包中的handlerHTTP
- Android Handler 訊息傳送效能優化Android優化
- Android 訊息機制:Handler、MessageQueue 和 LooperAndroidOOP
- Android Handler MessageQueue Looper 訊息機制原理AndroidOOP
- Android點將臺:烽火狼煙[-Handler-]Android
- Android 高階面試-1:Handler 相關Android面試
- Android Handler機制之迴圈訊息佇列的退出Android佇列
- android 非同步通訊機制Handler的分析與運用Android非同步
- Android Handler機制理解和AsyncTask使用小記Android