1. 程式人生 > >Android《第一行程式碼》第5章 筆記

Android《第一行程式碼》第5章 筆記

第五章主要介紹了Android中的廣播機制。

Android中的每個應用程式都可以對自己感興趣的廣播進行註冊。Android允許應用程式自由地傳送和接收廣播。可以通過Intent傳送廣播,通過廣播接收器(Broadcast Receiver)來接收廣播。

廣播型別分為標準廣播有序廣播。標準廣播是一種完全非同步執行的廣播,廣播發出後,所有廣播接收器幾乎會在同一時刻接收到這條廣播訊息,沒有先後順序,無法被截斷。有序廣播 是一種同步執行的廣播,廣播發出後,同一時刻只會有一個廣播接收器能收到這條廣播訊息,這個廣播接收器中的邏輯執行完畢後,廣播才會繼續傳遞。廣播接收器是有先後順序的,優先順序高的廣播接收器可以先收到廣播訊息,並且前面的廣播接收器還可以截斷正在傳遞的廣播,這樣後面的廣播接收器就無法收到廣播訊息。

註冊廣播有兩種方法,一種是動態註冊,指在程式碼中註冊,一種是靜態註冊,在AndroidManifest.xml中註冊。動態註冊是先定義一個類繼承自BroadcastReceiver,重寫父類的onReceive()方法,再在活動的onCreate()方法中建立了一個IntentFilter的例項,用addAction()方法新增一個action值,指定廣播接收器想要監聽什麼廣播,再建立一個之前定義好的類的例項,呼叫registerReceiver()方法進行註冊,將剛才類的例項和IntentFilter的例項都傳進去即可。在onDestroy()方法中呼叫unregisterReceiver()方法可以取消註冊。Android系統為了保證應用程式的安全性做了規定,如果程式需要訪問一些系統的關鍵性資訊,必須在配置檔案中宣告許可權才可以,否則程式會直接崩潰,比如查詢網路狀態就需要宣告許可權。動態註冊的廣播接收器可以自由地控制註冊和登出,在靈活性上有很大優勢,但它必須在程式啟動後才能接收到廣播,用靜態註冊的方法可以在程式未啟動時接收到廣播。即還是自定義一個類繼承BroadcastReceiver(),然後在AndroidManifest.xml中的<application>標籤中使用<receiver>標籤,用android:name指定註冊哪個廣播接收器,在<intent-filter>標籤里加入想要接收的廣播即可。

不要在onReceive()方法中新增過多的邏輯或進行任何的耗時操作,因為在廣播接收器中是不允許開啟執行緒的。廣播接收器更多的是扮演開啟程式其他元件的角色,比如建立一條狀態列通知,或者開啟一個服務等。

傳送標準廣播時先構建一個Intent物件,將要傳送的廣播值傳入,呼叫Context的sendBroadcast()方法將廣播發送出去即可。

傳送有序廣播只需將sendBroadcast()方法改成sendOrderedBroadcast()方法,第一個引數仍然是Intent,第二個引數是與許可權相關的字串,傳入null即可。可以通過android:priority給廣播接收器設定優先順序,優先順序比較高的廣播接收器就可以先收到廣播。在onReceive()方法中呼叫abortBroadcast()方法,就表示將這條廣播截斷。

之前傳送和接收的廣播都屬於系統全域性廣播,即發出的廣播可以被任何程式接收到。Android還有一套本地廣播機制。使用LocalBroadcastManager的getInstance()方法得到它的一個例項,呼叫它的registerReceiver()方法註冊廣播接收器,傳送廣播時也是呼叫它的sendBroadcast()方法,即可實現本地廣播在本應用程式內傳播。本地廣播無法通過靜態註冊的方式來接收。

可以通過廣播來實現強制下線功能。因為被通知強制下線時我們可能處於任何一個介面,所以可以藉助廣播來實現。

本章最後簡單地介紹了Git的安裝及建立程式碼倉庫和提交原生代碼。Git是一個開源的分散式版本控制工具。