標籤:技術 info 處理 block ase col systems stat idm
廣播機制簡介
Android的廣播可以分為兩種類型的,標準廣播和有序的廣播;
標準廣播: 是一種完全非同步執行的廣播,在廣播發出去之後,所有的廣播接收器幾乎是同一時接收到這條廣播。
有序廣播: 是一種完全同步執行的廣播,在廣播發出去之後,同一時刻只有一條訊息能接收到這條廣播。當這個廣播接收器中的邏輯執行完畢之後,廣播才會繼續傳遞,所以這個時候的廣播接收器是有先後順序的,優先順序高的廣播接收器就可以先接收到廣播訊息,並且前面的廣播接收器還可以截斷正在傳遞的廣播,這樣的話後面廣播接收器就不能接收到廣播訊息了。
動態註冊監聽網路變化
下面通過做一個監聽網路變化的例子,好好理解一下廣播。
註冊廣播的方式有兩種,在代碼中註冊和在AndroidManifest.xml中註冊,其中前者也被稱為 動態註冊 後者也被稱為 靜態註冊。
那麼該如何建立一個廣播接收器呢?其實也很簡單,讓它繼承自 BroadcaseReceiver ,並重寫父類的 onReceive() 方法就行了,這樣當有訊息來臨的時候onReceive()方法得到執行。具體的接收到廣播之後的邏輯就可以在這裡處理了。
1、在getSystemService這個方法裡,代碼沒有截取完整,完整的代碼是 context.CONNECTIVITY_SERVICE
2、系統為了保護使用者的隱私安全,是需要我們擷取一下網路許可權的,這個就是 Androidmanifest.xml 檔案中註冊
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
注意它和application標籤是同級的,不是包含的application標籤裡面的
靜態註冊
上面我們說的是動態註冊,我們可以看到動態註冊廣播接收器可以自由的控制它的註冊和銷毀,很是靈活,但是我們想一下有這樣的一個情境,我們的動態註冊都是在onCreate()方法裡面的,那有沒有在程式還沒有啟動的情況下就能接收到廣播呢?答案是當然可以,這就需要我們使用靜態註冊,也是我們接下來需要寫的靜態註冊。
它的建立方法如下:
1、建立的路勁如下 File - New - Other 你就能看到 Broadcast Receiver
2、Exported 表示是否允許這個廣播接收本程式以外的廣播
3、Enable 表示是否啟用這個廣播
建立之後我們需要寫的代碼全都在AndroidManifest.xml中,裡面涉及到的問題以及都在下面的代碼中:
另外:我們建立的StaticReceiver裡面的代碼我們就不看了,也就是一個onReceive方法,有一點需要我們注意的,不管是靜態還是動態都需要我們注意的點是:
注意一下,onReceive方法裡面不要寫過多的邏輯代碼或者換進行其他的耗時操作、因為在廣播接收器中是不允許開始新的線程的,要是這個方法長時間的沒有響應,程式就會報錯。
發送廣播
發送廣播這裡我們就直接看看代碼是怎樣發送標準廣播和有序廣播的。
還要一個本地廣播我們代碼是寫在一起,那本地廣播是用來幹什麼的呢?不知道是否還記得前面我們說的靜態註冊廣播可以接收其他應用程式的廣播,這樣就降低的程式的安全性,容易引發安全問題!為瞭解決這個問題,安卓就引入了本地廣播的概念,本地廣播就是發出的廣播只能夠在程式的內部進行床底,並且廣播接收器也只能來接收來自本應用程式發出的廣播,提高了程式的安全性!
我們這裡就唯寫了註冊以及發送,註冊這部分就不在寫了,還是在我們的onDestroy方法裡面登出。
下面這裡還有一點需要我們注意的,就是有序廣播發出之後,接收器的優先順序的問題,代碼如下:
上面就是我們總結的關於安卓廣播通知的問題!
Android學習--廣播機制