Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android學習日記19--四大組件之BroadcastReciver(廣播接收者)

android學習日記19--四大組件之BroadcastReciver(廣播接收者)

編輯:關於Android編程

二、BroadcastReciver(廣播接收者)       1、簡述   BroadcastReciver位於android.content包下,主要用於對廣播消息(Intent)的過濾並響應的控件。 BroadcastReceiver 自身並不實現圖形用戶界面,但是當它收到某個廣播消息後,BroadcastReceiver可以啟動Activity作為響應, 或者啟動Service服務等等。       2、運行原理   當其他應用程序發出廣播消息之後,所有注冊了BroadcastReciver的應用程序將會檢測注冊時的(過濾器)IntentFilter是否與發出的廣播消息相匹配, 匹配則會調用BroadcastReciver的onReceive()方法進行處理。所以開發BroadcastReciver應用,主要是對onReceive()方法的實現       3、生命周期   生命周期不像Activity那麼復雜,一般生命周期是:啟動(被其他程序調用,接收到匹配的廣播)-->運行(執行onReceive()方法)-->結束(釋放資源) 每次廣播到來時,會重新創建BroadcastReceiver對象 ,並且調用onReceive()方法,執行完以後,該對象即被銷毀。當onReceive()方法在10秒內沒有執行完畢, Android會認為該程序無響應。所以在BroadcastReceiver裡不能做一些比較耗時的操作,否側會彈出 ANR(Application NoResponse)的對話框。       4、廣播的類型   主要有以下兩種類型:   a、普通廣播   普通廣播對於多個接收者來說是完全異步的,通常每個接收者都無需等待即可以接收到廣播,接收者相互之間不會有影響。對於這種廣播,接收者無法終止廣播,即無  法阻止其他接收者的接收動作。   b、有序廣播   有序廣播比較特殊,它每次只發送到優先級較高的接收者那裡,然後由優先級高的接受者再傳播到優先級低的接收者那裡,優先級高的接收者有能力終止這個廣播     5、廣播的收發   a、發送廣播:構建Intent對象,可調用sendBroadcast(Intent)方法將廣播發出。另外還有sendOrderedBroadcast(),sendStickyBroadcast()等方法   b、接收廣播:通過定義一個繼承BroadcastReceiver類來實現,繼承該類後覆蓋其onReceiver方法,並在該方法中響應事件       6、廣播的注冊   創建完BroadcastReceiver之後,還不能夠使它進入工作狀態,我們需要為它注冊一個指定的廣播地址,否則無法接收廣播   一般有如下兩種注冊:   a、靜態注冊   1 <receiver android:name=".MyReceiver"> 2 <intent-filter> 3 <action android:name="android.intent.action.MY_BROADCAST"/> 4 <category android:name="android.intent.category.DEFAULT" /> 5 </intent-filter> 6 </receiver>   b、動態注冊   1 MyReceiver receiver = new MyReceiver(); 2  3 IntentFilter filter = new IntentFilter(); 4 filter.addAction("android.intent.action.MY_BROADCAST"); 5  6 registerReceiver(receiver, filter);   兩種注冊方法的區別是靜態注冊是常駐內存的,應用關閉是也可以接收廣播,而動態注冊是根著程序的生命周期,所以當這個程序退出時如果沒有解除注冊,系統會報一個異常,提示我們是否忘記解除注冊。這時要加入解除注冊的代碼:   1 @Override 2 protected void onDestroy() { 3 super.onDestroy(); 4 unregisterReceiver(receiver); 5 }     7、運行實例   寫個例子,運行程序時發送廣播,後台日志打印消息。       MyReceiver代碼:   復制代碼  1 public class MyReceiver extends BroadcastReceiver {  2   3     private static final String TAG = "MyReceiver";  4       5     @Override  6     public void onReceive(Context arg0, Intent intent) {  7         // TODO Auto-generated method stub  8         String msg = intent.getStringExtra("msg");  9         Log.i(TAG, msg);  10     } 11  12 } 復制代碼 Activity發送廣播代碼:   1      Intent intent = new Intent("android.intent.action.MY_BROADCAST"); 2         intent.putExtra("msg", "Hello Receiver!"); 3         sendBroadcast(intent); 直接用靜態注冊廣播。上述例子的廣播是我們自己寫的。Android提供許多豐富的原生廣播地址。常用如下:     開機啟動:<action android:name="android.intent.action.BOOT_COMPLETED"/>      網絡連接:<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>     電量變化:<action android:name="android.intent.action.BATTERY_CHANGED"/>     時間改變:<action android:name="android.intent.action.DATE_CHANGED"/>   只要更改自定義Receiver就可以觸發一些相應事件。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved