为了方便Android系统各个应用程序及程序内部进行通信,Android系统引入了一套广播机制。各 个应用程序可以对感兴趣的广播进行注册,当系统或者其他程序发出这条广播的时候,对发出的广 播进行注册的程序便能够收到这条广播。为此,Android系统中有一套完整的API,允许程序只有 的发送和接受广播。
是一种完全异步执行的广播,在广播发出之后,所有的广播接收器会在同一时间接收到这条广 播,广播无法被截断. 发送方式: Intent intent=new Intent("com.example.dimple.BROADCAST_TEST"); sendBroadcast(intent);
是一种同步执行的广播,在广播发出之后,优先级高的广播接收器可以优先接收到这条广播, 并可以在优先级较低的广播接收器之前截断停止发送这条广播。 发送方式: Intent intent=new Intent("com.example.dimple.BROADCAST_TEST"); sendOrderBroadcast(intent,null);//第二个参数是与权限相关的字符串。
在Android的广播接收机制中,如果需要接收广播,就需要创建广播接收器。而创建广播接收器的 方法就是新建一个类(可以是单独新建类,也可以是内部类(public)) 继承自 BroadcastReceiver class myBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //不要在广播里添加过多逻辑或者进行任何耗时操作,因为在广播中是不允许开辟 线程的, 当onReceiver( )方法运行较长时间(超过10秒)还没有结束的话,那么程序会报错 (ANR), 广播更多的时候扮演的是一个打开其他组件的角色,比如启动Service,Notification 提示, Activity等! } }
1、动态注册的广播接收器可以自由的控制注册和取消,有很大的灵活性。但是只能在程序启动之后才 能收到广播,此外,不知道你注意到了没,广播接收器的注销是在onDestroy()方法中的。所以广 播接收器的生命周期是和当前活动的生命周期一样。
2、静态注册的广播不受程序是否启动的约束,当应用程序关闭之后,还是可以接收到广播。
所谓动态注册是指在代码中注册。步骤如下 : - 实例化自定义的广播接收器。 - 创建IntentFilter实例。 - 调用IntentFilter实例的addAction()方法添加监听的广播类型。 - 最后调用Context的registerReceiver(BroadcastReceiver,IntentFilter)动 态的注册广播。 PS:这里提醒一点,如果需要接收系统的广播(比如电量变化,网络变化等等),别忘记在 AndroidManifest配置文件中加上权限。 另外,动态注册的广播在活动结束的时候需要取消注册: @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myBroadcastReceiver); }
<receiver android:name="com.ttit.core.broadcastreceiver.MyBRReceiver2"> <intent-filter> <action android:name="com.example.broadcasttest.MY_BROADCAST" /> </intent-filter> </receiver>
原文:https://www.cnblogs.com/ljstudy/p/14586044.html