您的位置:首页 > 移动开发 > Android开发

Android:四大组件之-----广播(Broadcast)

2016-06-16 16:17 746 查看
相信很多读者都与笔者一样,在刚学安卓的时候就接触到广播。但是并不知道广播其实也分好几种,我们刚学习使用的只是广播的其中一种:普通广播

android的广播分为:

普通广播,

有序广播,

本地广播,

sticky广播,

下面就为大家介绍一下这四种广播的区别与用法。

一.普通广播

普通广播是异步的,通过context,sendBroadcast()发送。传递效率比较高。但是所有receivers(接收器)的接收顺序并不能确定。

这种广播不能将处理结果传递给下一个接受者,并且无法终于广播Intent的传播,知道没有与之相匹配的广播接收器才会结束。

定义广播接收器的方法如下:

广播接收器与四大组件的其它组件一样,也需要注册,在AndroidManifest.xml注册方式:

public class TestBroadcastRecever extends BrocadcastReceiver{
public void onReceive(Context context,Intent intent){
Log.i("test","hi ");
}
}


<receiver android:name="xxx.TestBrocastRecever"></receiver>
使用java代码的注册方式:
IntentFilter intentFilter=new IntentFilter();
registerReceiver(new TestBrocastRecever(),intentFilter);
用代码注册的时候可以用intentFilter指定各种action。而在AndroidManifest.xml注册的话可以通过intent-filter标签中设置action标签达到相同的目的。

二.有序广播

有序广播是通过context.sendOrderedBroadcast()发送的。所有广播按照接收器的优先级高低接收。
而接收器的优先级是通过receiver的intent-fillter的android:priority属性设置的。数值越大优先级越高。
当接收器收到广播之后可以使用setResult()来将结果传给下一个光比接收器,然后下一个广播接收器可以通过getResult接收上一个广播接收器返回的结果。并可以用abortBroadcast()函数来让系统丢弃该广播,使得该广播不再传递到其它广播接收器。

三.本地广播

在api level21中的support v4中添加了本地广播:LocalBrocastManager。

上面说的普通广播和有序广播都是全局的,系统内所有应用都可以接收到的。这样有可能会带来安全隐患。在某些时候我们并不需要把自己应用内的信息广播给别的应用,而是进程内使用的话就可以使用本地广播了。

本地广播用法很简单。只需要在发送广播注册广播和注销广播的时候换成以下方法:
LocalBroadcastManager.getInstance(context).sendBrocast();//发送异步广播
LocalBroadcastManager.getInstance(context).sendBrocastSync();//发送同步广播

LocalBroadcastManager.getInstance(context).registerReceiver();//注册广播

LocalBroadcastManager.getInstance(context).unregisterReceiver();//注销广播

本地光比与普通广播的操作方式只是操作的类不一样而已。其它使用法方式基本上一致。因此替换为本地广播的成本会比较低。在不需要其它进程接收广播的情况下使用本地广播是有必要的。

四.sticky广播

 sticky广播通过context.sendStickyBrocast(0函数发送,用该该函数发送的广播会一直滞留,当有匹配的广播接收器被注册后,该广播接收器就会接收到该广播。
该广播比较特殊,需要BROADCAST_STICK权限才能使用。
sticky广播只保留最后一挑广播,并且会一致保留下去,这样即使已经有广播接收器处理了该广播,当再有匹配该广播的广播接收器注册的时候,就会接收到该广播。如果想移除该广播可以使用removeStickyBrocast(0函数移除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息