1.两种类型
有序广播:同步执行,发出后,同时只有一个能收到,操作完成后依次向下发送,可以被拦截
无序广播:异步执行,发出广播后,所有的广播接收器几乎会同时收到,无法被拦截
2.两种注册方式
动态注册:代码中指定IntentFilter,增加不同的Action,使用后要手动取消注册
静态注册:在清单文件中注册,可以让程序在未启动时就可以接收到广播
3.注意事项
不要在广播里添加过多逻辑或耗时操作,广播中是不允许开辟线程的, 当onReceiver运行较长时间(超过10秒)还没有结束的话,会报错ANR, 广播更多的时候扮演的是一个打开其他组件的角色,比如启动Service,Notification提示, Activity等!
4.使用
动态注册广播
1> 继承BroadcastReceiver,实现onReceiver方法,里面写逻辑
2> 发送 使用完成后调用unregisterReceiver(myReceiver)中取消注册
myReceiver = new MyBRReceiver();
IntentFilter itFilter = new IntentFilter();
itFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(myReceiver, itFilter);
静态注册
1> 自定义一个BroadcastReceiver,重写onReceive完成逻辑
2> 在清单文件中注册BroadcastReceiver,添加开机广播的intent-filter,别忘了加上android.permission.RECEIVE_BOOT_COMPLETED的权限哦!
3> 使用sendBroadcast(new Intent(""))发送广播
5.本地广播
注意:本地广播无法通过静态注册方式来接受,相比起系统全局广播更加高效
使用LocalBroadcastManager来管理广播
1> 调用LocalBroadcastManager()获取实列
2> 调用 .registerReceiver()注册
3> 调用 .sendBroadcast()发送
4> 调用 .unregisterReceiver()取消注册