Android中Handler簡介

1.本文的閱讀對象

本文的閱讀對象是掌握了一些安卓基礎知識的朋友,本文不會涉及源碼,也不會有過多代碼,對新手比較友好,用簡單容易理解的語言描述Handler在安卓開發中的作用

2.Handler是什麼?

我們先從字面分析,Handler由英文直譯,可以翻譯爲處理者。在Android中,Handler機制主要用作異步消息處理,這是谷歌設計的一套機制,能幫助我們有序的處理異步操作。

3.Android中的UI線程

在android中,當應用啓動之後,系統會創建一個線程,Ui線程,也就是MainThread,在這個線程中,你可以使用代碼操作控件,產生交互效果,簡單說,UI線程操作UI,在安卓中,UI的操作只能在UI線程中完成,谷歌就是這樣設計的。當然這一點不是十分絕對的,這裏我不過多敘述,朋友們可以先記住這一點,非UI線程不能操作UI。

4.如何在非UI線程中操作UI?

上一條已經說了,非UI線程不能操作UI,那麼在非UI線程中如何操作UI控件呢,那麼就要請出我們今天的主角了,也就是Handler。在說Handler之前,我要先說幾個關鍵概念。

Looper:

循環器,主要負責從消息隊列MessageQueue中取出消息。關於Looper,記住三個方法以及一個概念。第一個方法就是構造方法,在構造方法中Looper創建了一個消息隊列MessageQueue,第二個方法是,prepare(),在這個方法中將一個Looper實例綁定到線程中,並保證當前線程只能有一個Looper實例。第三個方法是loop(),該方法是一個死循環,不斷從消息隊列中取出方法,如果隊列爲空,會直接return。還有一個概念就是消息隊列。MessageQueue,在Handler機制中產生的消息都保存在消息隊列中,原則是先進先出。以上就是Looper的簡介,有興趣的同學可以去閱讀下源碼。只看幾個關鍵點就可以。

Handler:

處理者,相信大家都應該使用過,一般使用方式就是在Ui線程中創建該類對象,在非ui線程中使用該對象發送消息,在handleMessage中處理消息。關於Handler的源碼,大家看一下構造方法就可以,在構造方法中,Handler獲取了當前線程的looper,並通過這個looper實例獲取了這個Looper的消息隊列MessageQueue,這樣就可以理解爲三者綁定在了一起。關於消息的發送等操作,可以去看sendMessage等方法。

Message:

消息,使用過Handler的朋友都不會陌生。Message可以通過該對象的屬性傳遞很多信息(what,obj,等),然後在HanderlMessage方法中處理該消息。關於Message的源碼這裏不在敘述。發送消息有這樣幾個常用方法。sendMessage、直接發送消息,sendMessageAtTime、在一個指定的時間發送消息,sendMessageDelayed,在一定延遲後發送消息。這裏還要簡單說一下handler的post相關方法。該方法參數是一個runnable對象,可以將線程發送到當前handler去執行,具體方法和上述相似。

介紹完以上幾個概念相信大家都可在開發中使用Handler了,進而實現本小節的主題,在非ui線程中操作ui。

5.總結

以上簡單概述了Handler的一些基本概念和基本使用方法,具體使用方法和具體源碼可自行百度,本文主要的目的是給大家建立一個Handler的模糊概念。同時,如本文有錯誤內容歡迎大家批評指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章