Android:四大组件之-----广播(Broadcast)
2016-06-16 16:17
746 查看
相信很多读者都与笔者一样,在刚学安卓的时候就接触到广播。但是并不知道广播其实也分好几种,我们刚学习使用的只是广播的其中一种:普通广播
android的广播分为:
普通广播,
有序广播,
本地广播,
sticky广播,
下面就为大家介绍一下这四种广播的区别与用法。
这种广播不能将处理结果传递给下一个接受者,并且无法终于广播Intent的传播,知道没有与之相匹配的广播接收器才会结束。
定义广播接收器的方法如下:
广播接收器与四大组件的其它组件一样,也需要注册,在AndroidManifest.xml注册方式:
而接收器的优先级是通过receiver的intent-fillter的android:priority属性设置的。数值越大优先级越高。
当接收器收到广播之后可以使用setResult()来将结果传给下一个光比接收器,然后下一个广播接收器可以通过getResult接收上一个广播接收器返回的结果。并可以用abortBroadcast()函数来让系统丢弃该广播,使得该广播不再传递到其它广播接收器。
上面说的普通广播和有序广播都是全局的,系统内所有应用都可以接收到的。这样有可能会带来安全隐患。在某些时候我们并不需要把自己应用内的信息广播给别的应用,而是进程内使用的话就可以使用本地广播了。
本地广播用法很简单。只需要在发送广播注册广播和注销广播的时候换成以下方法:
LocalBroadcastManager.getInstance(context).sendBrocast();//发送异步广播
LocalBroadcastManager.getInstance(context).sendBrocastSync();//发送同步广播
LocalBroadcastManager.getInstance(context).registerReceiver();//注册广播
LocalBroadcastManager.getInstance(context).unregisterReceiver();//注销广播
本地光比与普通广播的操作方式只是操作的类不一样而已。其它使用法方式基本上一致。因此替换为本地广播的成本会比较低。在不需要其它进程接收广播的情况下使用本地广播是有必要的。
该广播比较特殊,需要BROADCAST_STICK权限才能使用。
sticky广播只保留最后一挑广播,并且会一致保留下去,这样即使已经有广播接收器处理了该广播,当再有匹配该广播的广播接收器注册的时候,就会接收到该广播。如果想移除该广播可以使用removeStickyBrocast(0函数移除。
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函数移除。
相关文章推荐
- 利用IE收听“广播”
- Android广播接收机制详细介绍(附短信接收实现)
- 使用Broadcast实现Android组件间的通信
- Jquery实现仿腾讯微博发表广播
- Android使用广播(BroadCast)实现强制下线的方法
- Android基于广播事件机制实现简单定时提醒功能代码
- Android实现静态广播监听器的方法
- Android中的广播、服务、数据库、通知、包等术语的原理和介绍(图解)
- Android中的广播(BroadCast)详细介绍
- Android中的广播和广播接收器代码实例
- Android基础知识之broadcast广播详解
- Android开发之广播机制浅析
- Android 广播大全 Intent Action 事件详解
- 广播
- 网络广播风暴的几种原因
- 简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver
- 【原理总结】DHCP数据包分析
- 云桌面客户端配置
- Android 里的各种通信方式(四)
- BroadcastReceiver