Handler 再探索 知其然更知其所以然

2021-10-07 16:55:09 字數 2210 閱讀 2768

handler 基本用法

目錄:一、android 系統型別:

談handler前,我覺得最好是先了解一下android的系統型別。android是與windows系統一樣,也是訊息驅動型的系統。怎麼說呢,就是要遵守以下幾點:

訊息驅動型,從這幾點大概就理解了,不理解也麼關係,在向下看。

二、為什麼引入 handler?
這個主要是執行緒安全問題。多個執行緒併發執行ui執行緒的話,可能會導致執行緒安全問題的出現。

這時候安卓就給出了解決機制:要讓氙氣燈的執行緒週期性的修改ui元件屬性值,咋辦呢?

handler 微微一下,大爺我來了!

簡單點說:
當我們的子執行緒想修改activity中的ui元件時,我們可以新建乙個handler物件,通過這個物件向主線程傳送資訊;而我們傳送的資訊會先到主線程的messagequeue進行等待,由looper按先入先出順序取出,再根據message物件的what屬性分發給對應的handler進行處理!

三、關鍵字

在深入剖析一下,我們先了解一些關鍵字:

1.ui執行緒 : 就是我們的主線程,系統在建立ui執行緒的時候會初始化乙個looper物件,同時也會建立乙個與其關聯的messagequeue;

2.handler : 作用就是傳送與處理資訊,如果希望handler正常工作,在當前執行緒中要有乙個looper物件

3.message : handler接收與處理的訊息物件

3.messagequeue : 訊息佇列,先進先出管理message,在初始化looper物件時會建立乙個與之關聯的messagequeue;

4.looper : 每個執行緒只能夠有乙個 looper 和 messagequeue,但是可以有多個handler,管理messagequeue,不斷地從中取出message分發給對應的handler處理!

通俗的講,這是我個人理解:

2.handler : handler的話,就像你要生活,你對外貼的小廣告,說你可以幹什麼,然後別人就通過小廣告給你打**,你就可以幫別人幹事情賺錢了。

3.message : 就是訊息,實際的訊息內容,比如我分給你個訊息:我,秦始皇,打錢!

3.messagequeue : 這個也容易理解,就是你要處理的事情,今天你接了三個單,乙個單是讓你送外賣,乙個單是讓你打錢,乙個是讓你幫忙洗衣服,一得乙個乙個幹,誰的需求先來,你先處理誰的事情,遵循的是先來後到原則。

4.looper : 每個廣告都得寫上你的**號吧,這就是looper,但這裡你只會寫上你的工作號碼,所以安卓中就是說,乙個執行緒只讓你有乙個looper,messagequeue也是這樣。

以上就是我對handler的理解,或許不怎麼對,請幫忙指出來~

四、handler 相關方法

常用:

1.處理訊息的方法,通常是用於被重寫

2.子類必須實現它才能接收訊息

1.立即傳送資訊
1、傳送空訊息
1.指定延時多少毫秒後傳送空資訊
1.指定延時多少毫秒後傳送資訊
1.檢查訊息佇列中是否包含what屬性為指定值的訊息 

2.如果是引數為(int what,object object):除了判斷what屬性,還需要判斷object屬性是否為指定物件的訊息

其他:
1.使runnable r新增到訊息佇列中,在uptimemillis給定的特定時間執行。
1.使runnable r新增到訊息佇列中,並在經過指定的時間後執行。
1.刪除訊息佇列中所有runnable r的待處理訊息。
五、handler寫在主線程/子執行緒區別:

引用乙個經典示例說明:

class looperthread extends thread 

};looper.loop();

}}//只有在子執行緒需要 looper.prepare()和 looper.loop();

//因為主線程在初始化的時候已經建立了乙個looper物件了

android的Handler進行UI更新

handle處理不同執行緒之間的資料傳輸,每乙個執行緒建立後會與乙個looper關聯,looper管理message佇列的地方吧,handle是傳送message的運送東西,looper可以與多個handler關聯,在主線程中handler建立後會與主線程關聯,在子執行緒中通過 handler.se...

委託和事件再探索

一直以為張子陽是位功力深厚的長者,今天才知道他比 我大一歲!功力深厚也就罷了,還長得那麼帥!汗顏!張老師 在技術上不分輩分 的文章我一直關注,由淺及深,能跟著學不少東西非常棒!我看技術從來不做筆記的,以為自己腦子好使,最近 發現老是忘事,看來到了該做筆記的年齡了!具體的關於c 中的委託和事件我就不再...

刷題篇 二分查詢再探索

刷完二分之後的感受,思想很簡單,細節是魔鬼!前面的部落格已經總結了二分查詢的三個模板,但是在實際刷題中,還是會遇到一些細節上的問題。所以本文在模板基礎上再次探索二分查詢。1.leetcode69,x的平方根。def mysqrt x l,r 1,x while l r mid l r l 2 if ...