广播可分为标准和有序广播:
标准广播:
是一种完全异步执行的广播,广播发出后,所有的广播接收器几乎会在同一时刻收到这条广播的消息。有序广播
是一种同步执行的广播,同一时刻只会有一个广播接收器能够收到这条广播的消息。优先级高的广播可以优先收到广播消息
注册广播的方式:
- 在清单中注册(静态注册)
<receiver android:name=".广播接收器">
<intent-filter>
<!--监听的广播-->
<action android:name="广播名"/>
</intent-filter>
</receiver>
- 在代码中注册(动态注册):
public class MainActivity extends Activity{
private IntentFilter intentFilter;
private MyBroadcastReceiver myBroadcastreceiver;
@Overried
protected void onCreate(Bundle savedInstanceState){
super.oncreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter=new IntentFilter();
intentFilter.addAction("广播名");//添加要监听的广播
myBroadcastreceiver=new MyBroadcastreceiver();
registerReceiver(myBroadcastreceiver,intentFilter);//注册广播
}
@Overried
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(myBroadcastreceiver);//解绑广播
}
}
创建广播接收器:
- 继承BroadcastReceiver,重写onReceiver方法,
- 当接收到广播时,就会调用到该方法
创建广播:
- 无序广播:Intent intent=new Intent(“广播名”);
sendBroadcast(intent); - 有序广播:
Intent intent=new Intent(“广播名”);
sendOrderedBroadcast(intent);
在清单中设置优先级:
<intent-filter android:priority="100">
权重高的越先收到广播
可在onReceiver方法中调用abortBroadcast()拦截有序广播
本地广播:发出的广播只能在应用内部传递,其广播接收器也只能接收到本应用的广播
本地广播的使用:
- 创建本地广播管理:LocalBroadcastManager.getInstance(this);
- 创建Intent:Intent intent=new Intent(“com.sendi.broadcast.LOCAL_BROADCAST”)
发送广播:localBroadcastManager.sendBroadcast(intent)
监听本地广播:
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("com.sendi.broadcast.LOCAL_BROADCAST");
localBroadcastManager.registerReceiver(localReceiver,intentFilter);
本地广播的优势:
- 可以明确地知道广播不会离开我们的程序
- 其他程序的广播无法发送到我们程序的内部
- 比系统全局广播更加高效