android廣播機制

android廣播機制就是在Android中,有一些操作完成以後,會傳送廣播,比如說發出一條簡訊,或打出一個電話,如果某個程式接收了這個廣播,就會做相應的處理。

基本介紹

  • 中文名:android廣播機制
  • 外文名:Android Broadcast Mechanism
  • 使用組件:BroadcastReceiver(廣播接收器)
廣播機制簡介,三要素,生命周期,廣播接收器,

廣播機制簡介

在Android中,有一些操作完成以後,會傳送廣播,比如說發出一條簡訊,或打出一個電話,如果某個程式接收了這個廣播,就會做相應的處理。這個廣播跟我們傳統意義中的電台廣播有些相似之處。之所以叫做廣播,就是因為它只負責“說”而不管你“聽不聽”,也就是不管你接收方如何處理。另外,廣播可以被不只一個應用程式所接收,當然也可能不被任何應用程式所接收。
廣播機制最大的特點就是傳送方並不關心接收方是否接到數據,也不關心接收方是如何處理數據的。
Android中廣播的是作業系統中產生的各種各樣的事件。例如,收到一條簡訊就會產生一個收到簡訊息的事件。而Android作業系統一旦內部產生了這些事件,就會向所有的廣播接收器對象來廣播這些事件。

三要素

Android廣播機制包含三個基本要素:廣播(Broadcast) - 用於傳送廣播;廣播接收器(BroadcastReceiver) - 用於接收廣播;意圖內容(Intent)-用於保存廣播相關信息的媒介。Broadcast是一種廣泛運用的在應用程式之間傳輸信息的機制。而BroadcastReceiver是對傳送出來的Broadcast進行過濾接受並回響的一類組件。

生命周期

廣播接收器僅在它執行這個方法時處於活躍狀態。當onReceive()返回後,它即為失活狀態。
擁有一個活躍狀態的廣播接收器的進程被保護起來而不會被殺死,但僅擁有失活狀態組件的進程則會在其它進程需要它所占有的記憶體的時候隨時被殺掉。所以,如果回響一個廣播信息需要很長的一段時間,我們一般會將其納入一個衍生的執行緒中去完成,而不是在主執行緒內完成它,從而保證用戶互動過程的流暢。

廣播接收器

1.1 簡介
BroadcastReceiver(廣播接收器)是為了實現系統廣播而提供的一種組件,並且廣播事件處理機制是系統級別的。比如,我們可以發出一種廣播來測試是否收到簡訊,這時候就可以定義一個BraodcastReceiver來接受廣播,當收到簡訊時提示用戶。我們既可以用Intent來啟動一個組件,也可以用sendBroadcast()方法發起一個系統級別的事件廣播來傳遞訊息。
我們也可以在自己的應用程式中開發BroadcastReceiver,然後把廣播接收器這個類或者對象註冊到Android作業系統上去,讓作業系統知道現在有這樣一個廣播接收器正在等待接收Android作業系統的廣播,即在自己的應用程式中實現BroadcastReceiver來監聽和回響廣播的Intent。
當有廣播事件產生時,Android作業系統首先告訴註冊到其上面的廣播接收器產生了一個怎么樣的事件,每個接收器首先判斷是不是我這個接收器需要的事件,如果是它所需要的事件,再進行相應的處理。
例子,我們把騷擾電話的黑名單放到資料庫中去,當接到電話時會產生一個接電話事件,事先在Android作業系統中註冊一個BroadcastReceiver的對象,當產生事件的時候,會通知我們的廣播接收器對象,接收器對象接收到訊息之後,就會到資料庫裡面去取所有黑名單電話和接到的這個電話號碼進行比較,如果匹配就直接掛掉。
1.2 註冊BroadcastReceiver
BroadcastReceiver用於監聽被廣播的事件(Intent),為了達到這個目的,BroadcastReceiver必須進行註冊,註冊的方法有以下兩種:
1.靜態註冊
靜態註冊方式是在AndroidManifest.xml的application裡面定義receiver並設定要接收的action。
靜態註冊方式的特點:不管該應用程式是否處於活動狀態,都會進行監聽。
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="MyReceiver_Action"/>
</intent-filter>
</receiver>
其中,MyReceiver為繼承BroadcastReceiver的類,重寫了onReceiver方法,並在onReceiver方法中對廣播進行處理。<intent-filter>標籤設定過濾器,接收指定action廣播。
2.動態註冊
動態註冊方式在activity裡面調用函式來註冊,和靜態的內容差不多。一個形參是receiver,另一個是IntentFilter,其中裡面是要接收的action。
動態註冊方式特點:在代碼中進行註冊後,當應用程式關閉後,就不再進行監聽。
MyReceiver receiver = new MyReceiver();
//創建過濾器,並指定action,使之用於接收同action的廣播
IntentFilter filter = new IntentFilter("MyReceiver_Action");
//註冊廣播接收器
registerReceiver(receiver, filter);
1.3 傳送廣播
// 指定廣播目標Action
Intent intent = new Intent("MyReceiver_Action");
// 可通過Intent攜帶訊息
intent.putExtra("msg", "傳送廣播");
// 傳送廣播訊息
sendBroadcast(intent);
1.4 註銷BroadcastReceiver
//註銷廣播接收器
unregisterReceiver(receiver);
註:
1.一般在onStart中註冊BroadcastReceiver,在onStop中取消BroadcastReceiver。
2.一個BroadcastReceiver 對象只有在被調用onReceive(Context, Intent)時才有效,當從該函式返回後,該對象就無效的了,結束生命周期。

相關詞條

熱門詞條

聯絡我們