标准广播:一种完全异步执行的广播,在广播发出去之后,所有的接收器几乎都会在同一时刻接受到这条广播消息,因此它们之间没有任何顺序可言。优点:效率高。缺点:无法截断。
有序广播:一种同步执行的广播,在广播发出之后,同一时刻只有会有一个广播接收器能够接受到这条消息广播,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。优点,可以截断。缺点:效率低。
标准广播的使用:
//直接创建Intent实例,在实例中添加action,然后发送广播即可
//xxxx代表需要添加的action
Intent intent = new Intent("xxxx");
sendBroadcast(intent);
有序广播的使用:
//直接创建Intent实例,在实例中添加action,然后发送广播即可
//xxxx代表需要添加的action
Intent intent = new Intent("xxxx");
sendOrderedBroadcast(intent);
那么如何截断有序广播呢?只需要在处理广播的onReveive函数中加入abortBroadcast()方法即可
既然有顺序,那么一定有优先级,那么如何设定广播接收器的先后顺序呢?只需要将AndroidManifest.xml注册的广播接收器的<intent-fliter>标签中添加android:priority属性,如下<intent-fliter android:priority = "100">,就完成了设置这个广播接收器的优先级为100。
那么如何实现广播接收器呢?广播接收器分为两种,动态注册和静态注册:
动态注册的广播可以自由的控制注册与注销,在activity中定义内部类还可以实现更改ui。但是必须在启动程序之后才能接收到广播。如果要想实现在程序未启动的情况下就能接收广播,需要使用静态注册。