android廣播的注冊
1. Android 第六講 廣播接收器和服務
兩種方式:靜態注冊和動態注冊
動態注冊:
1)動態注冊:需要定義一個繼承自BroadcastReceiver類的子類,該接收器需要在Activity中的onDestroy中注銷
2)靜態注冊:通過在AndroidManifest.xml中配置
兩種廣播形式:有序廣播和無序廣播
1)無序廣播:接受標准廣播的接收器將同時收到廣播消息,非同步執行,沒有先後順序 sendBroadCast
2)有序廣播:sendOrderedBroadCast,按照一定順序先後被接受順序,由priority屬性決定,abortBroadCast中斷廣播
如果只想在本應用中發送和接受廣播,使用LocalBroadcastReceiver來對廣播進行管理
本地廣播不支持靜態注冊
優點 :安全高效
Service是Android中的一種組件,和Activity的級別一致,但不能自己運行,只能後台運行,和其他組件交互,服務必須注冊才能使用
本地服務:服務依附在主線程中,節約資源,主線程死掉服務終止
遠程服務:服務在獨立進程中,靈活性好 ,佔用資源高
兩種服務的啟動模式:
1)start方式:調用者和服務之間沒有關聯,調用者退出不會影響服務,startService啟動服務,如果服務不存在,調用onCreat方法,然後onStartCommand被調用。stopService關閉服務,onDestroy方法被調用
2)bind方式:調用者和服務綁定,調用者退出,服務終止bindService啟動服務,onCreate方法創建服務,onBind方法綁定服務,onUnbind方法解綁,onDestory在服務結束時調用
2. Android闈欐佹敞鍐屽箍鎾鍜屽姩鎬佹敞鍐屽箍鎾鐨勫尯鍒
1.鍔ㄦ佹敞鍐屽箍鎾涓嶆槸甯擱┗鍨嬪箍鎾錛屼篃灝辨槸璇村箍鎾璺熼殢activity鐨勭敓鍛藉懆鏈熴傛敞鎰: 鍦╝ctivity緇撴潫鍓嶏紝縐婚櫎騫挎挱鎺ユ敹鍣ㄣ
闈欐佹敞鍐屾槸甯擱┗鍨嬶紝涔熷氨鏄璇村綋搴旂敤紼嬪簭鍏抽棴鍚庯紝濡傛灉鏈変俊鎮騫挎挱鏉ワ紝紼嬪簭涔熶細琚緋葷粺璋冪敤鑷鍔ㄨ繍琛屻
瀹冪殑鐢熷懡鍛ㄦ湡涓轟粠鍥炶皟onReceive()鏂規硶寮濮嬪埌璇ユ柟娉曡繑鍥炵粨鏋滃悗緇撴潫銆
2.褰撳箍鎾涓烘湁搴忓箍鎾鏃訛細
1 浼樺厛綰ч珮鐨勫厛鎺ユ敹
2 鍚屼紭鍏堢駭鐨勫箍鎾鎺ユ敹鍣錛屽姩鎬佷紭鍏堜簬闈欐
3 鍚屼紭鍏堢駭鐨勫悓綾誨箍鎾鎺ユ敹鍣錛岄潤鎬侊細鍏堟壂鎻忕殑浼樺厛浜庡悗鎵鎻忕殑錛屽姩鎬侊細鍏堟敞鍐岀殑浼樺厛浜庡悗娉ㄥ唽鐨勩
3. Android開發中廣播的作用及注冊方式,
廣播是一種運用的在應用程序之間傳輸信息的機制。而BroadcastReceiver 是對發送出來的Broadcast進行過濾接受並響應的一類組件。廣播既可以在清單文件AndroidManifest.xml 中注冊,也可以在運行時的代碼中使用Context.registerReceiver()進行注冊。只要是注冊了,當事件來臨的時候,即使程序沒有啟動,系統也在需要的時候啟動程序。
4. Android注冊廣播有幾種方式,分別是什麼
注冊方式有兩種:
1、靜態注冊,就是在manifest文件里配置一下,這種方式注冊的廣播屬於系統級廣播。你的應用沒打開也能收到廣播。比如你要做一個收到某廣播就啟動你的應用的功能可以這樣搞。
2、動態注冊,在代碼里執行一個rigisterBroadcastReciver(可能拼寫有誤)的方法。這種你要自己作好反注冊。這種廣播可以做成你的應用啟動後才監聽,關閉後就不監聽的效果。
5. 注冊廣播有幾種方式,這些方式有何優缺點請談談Android引入廣播機制的用意。
android中,不同進程之間傳遞信息要用到廣播,可以有兩種方式來實現。
第一種方式:在Manifest.xml中注冊廣播,是一種比較推薦的方法,因為它不需要手動注銷廣播(如果廣播未注銷,程序退出時可能會出錯)。
具體實現在Manifest的application中添加:上面兩個android:name分別是廣播名和廣播的動作(這里的動作是表示系統啟動完成),如果要自己發送一個廣播,在代碼中為:
Intent i = new Intent(「android.intent.action.BOOT_COMPLETED」);
sendBroadcast(i);
這樣,廣播就發出去了,然後是接收。
接收可以新建一個類,繼承至BroadcastReceiver,也可以建一個BroadcastReceiver的實例,然後得寫onReceive方法,實現如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(「android.intent.action.BOOT_COMPLETED」)) {
//Do something
}
}
};
第二種方式,直接在代碼中實現,但需要手動注冊注銷,實現如下:
IntentFilter filter = new IntentFilter();
filter.addAction(「android.intent.action.BOOT_COMPLETED」);
registerReceiver(mEvtReceiver, filter); //這時注冊了一個recevier ,名為mEvtReceiver,然後同樣用上面的方法以重寫onReceiver,
最後在程序的onDestroy中要注銷廣播,實現如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}
6. 12、注冊廣播有幾種方式,這些方式有何優缺點請談談Android引入廣播機制的用意。
注冊廣播的分類:靜態注冊和動態注冊。
靜態注冊:在清單文件里直接注冊,從app開啟到app銷毀,一直在接收廣播,接收廣播時間長,但是接收廣播的優先順序低於動態注冊廣播。
動態注冊:動態注冊,動態銷毀,從onCreate到取消注冊,期間接收廣播,接收廣播時間是短且可控,接收廣播的優先順序高。例如:
發送廣播:
Intent i = new Intent();
i.setAction("ACTION_CLOSE");
sendBroadcast(i);
接受廣播:
onCreate(){
//注冊廣播的接受者
IntentFilter filter = new IntentFilter();
filter.addAction("ACTION_CLOSE_ACTIVITY");
receiver = new InnerReceiver();
registerReceiver(receiver, filter);
}
private class InnerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO 當前Activity接收到廣播 需要做的事情
}
}
}
//注銷廣播
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
2.引入廣播的原因:
a) 不同的app之間傳信通用
b)發出一條指定,需要多個Activity都需要有反應
注意:以上僅供參考,如有疑問,請追問,謝謝。
7. android 注冊廣播有幾種方式,這些方式有何優缺點
一般來說,一種是動態注冊,即 用java代碼直接注冊,
如oncreate(){
this.registerreceiver(new yourbroadcast, Intenfilter i);
}
當然你也在其他如onstart里注冊,看你的業務是什麼要求了。取消注冊在對應的方法里。
一般是對應的,oncreate-onDestroy onstart-onstop
另一種就是xml文件注冊了。