android: 廣播機制

yufan發表於2016-02-03

記得在我上學的時候,每個班級的教室裡都會裝有一個喇叭,這些喇叭都是接入到學校 的廣播室的,一旦有什麼重要的通知,就會播放一條廣播來告知全校的師生。類似的工作機 制其實在計算機領域也有很廣泛的應用,如果你瞭解網路通訊原理應該會知道,在一個 IP 網路範圍中最大的 IP 地址是被保留作為廣播地址來使用的。比如某個網路的 IP 範圍是

192.168.0.XXX,子網掩碼是 255.255.255.0,那麼這個網路的廣播地址就是 192.168.0.255。 廣播資料包會被髮送到同一網路上的所有埠,這樣在該網路中的每臺主機都將會收到這條 廣播。

為了方便於進行系統級別的訊息通知,Android 也引入了一套類似的廣播訊息機制。相 比於我前面舉出的兩個例子,Android 中的廣播機制會顯得更加的靈活,本章就將對這一機 制的方方面面進行詳細的講解。

為什麼說 Android 中的廣播機制更加靈活呢?這是因為 Android 中的每個應用程式都可 以對自己感興趣的廣播進行註冊,這樣該程式就只會接收到自己所關心的廣播內容,這些廣 播可能是來自於系統的,也可能是來自於其他應用程式的。Android 提供了一套完整的 API, 允許應用程式自由地傳送和接收廣播。傳送廣播的方法其實之前稍微有提到過一下,如果你 記性好的話可能還會有印象,就是藉助我們第 2 章學過的 Intent。而接收廣播的方法則需要 引入一個新的概念,廣播接收器(Broadcast Receiver)。

廣播接收器的具體用法將會在下一節中做介紹,這裡我們先來了解一下廣播的型別。

Android 中的廣播主要可以分為兩種型別,標準廣播和有序廣播。

標準廣播(Normal broadcasts)是一種完全非同步執行的廣播,在廣播發出之後,所有的 廣播接收器幾乎都會在同一時刻接收到這條廣播訊息,因此它們之間沒有任何先後順序可 言。這種廣播的效率會比較高,但同時也意味著它是無法被截斷的。標準廣播的工作流程如 圖 5.1 所示。

圖   5.1

 

有序廣播(Ordered broadcasts)則是一種同步執行的廣播,在廣播發出之後,同一時刻 只會有一個廣播接收器能夠收到這條廣播訊息,當這個廣播接收器中的邏輯執行完畢後,廣 播才會繼續傳遞。所以此時的廣播接收器是有先後順序的,優先順序高的廣播接收器就可以先 收到廣播訊息,並且前面的廣播接收器還可以截斷正在傳遞的廣播,這樣後面的廣播接收器 就無法收到廣播訊息了。有序廣播的工作流程如圖 5.2 所示。

 

圖   5.2

 

相關文章