一、BroadCastReceiver两种注册方式:动态注册和静态注册
动态注册,即在代码中注册,如下:
receiver2 = new Receiver2();
registerReceiver(receiver2, new IntentFilter(
"com.niqiu.action.CLEARNOTIFICATION"));
当然也可以通过InterFilter的addAction方法添加多种广播过滤
在退出页面的时候,记得注销广播:
@Override
protected void onDestroy() {
super.onDestroy();
if (receiver2 != null) {
unregisterReceiver(receiver2);
receiver2 = null;
}
}
静态注册,即在AndroidManifest文件中注册,如下:
<receiver android:name="com.niqiu.demobroadcast.Broadcast.ReceiverCamera" >
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
<action android:name="android.intent.action.CALL" />
<action android:name="android.intent.action.AIRPLANE_MODE" />
</intent-filter>
</receiver>
- 静态注册在程序退出之后(点击back键,直到回到系统桌面,这个时候应用活跃在后台,还没被系统完全回收的情况下),仍然能接受并处理收到的broadcast,而动态注册则不能(Home键返回桌面是可以的)。
- 性能方面,静态注册一旦注册,那么会一直运行在系统后台,这样比较耗费资源,而动态注册则可以用代码灵活控制,在onResume()中注册,在程序退出或不可见onPause()时取消注册:unregisterReceiver(receiver);
- 手机重新关开机,那么不论是静态注册还是动态注册,一概不能接受处理broadcast。
下面提供了Demo的链接,包含两个工程。其中一个工程负责用两种方式注册广播,另一个工程则发起广播,注意在应用还没启动前,无论是以哪种形式注册的广播,都是接受不到的。
免积分下载链接:http://download.csdn.net/detail/u011484134/9219669