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

android的广播分为:

普通广播,

有序广播,

本地广播,

sticky广播,

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


一.普通广播

普通广播是异步的,通过context,sendBroadcast()发送。传递效率比较高。但是所有receivers(接收器)的接收顺序并不能确定。
这种广播不能将处理结果传递给下一个接受者,并且无法终于广播Intent的传播,知道没有与之相匹配的广播接收器才会结束。
定义广播接收器的方法如下:

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

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


        
使用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函数移除。



更多相关文章

  1. 说说在 Android(安卓)中如何接收系统广播
  2. 浅谈短、信彩信的拦截
  3. android动态改变桌面图标
  4. Android里的Xmpp的理解(消息推送)
  5. Android(安卓)屏蔽蓝牙连接时的首次配对系统弹窗
  6. Android(安卓)广播接受者
  7. android窗体加载过程剖析之消息处理的注册机制
  8. android安全问题(四) 抢先开机启动
  9. Android(六)Activity、请求码与结果码、Intent、广播、服务

随机推荐

  1. 关于Java的那些事
  2. 当餐饮行业创新与变革遇到完全自治的云计
  3. 使用iTunes从Mac获取视频到iPhone的方法
  4. Exadata X8 系列硬件的新变化
  5. 基于OAC的员工离职数据分析
  6. 高并发第六弹:线程封闭(ThreadLocal)
  7. 如何从Vimeo下载视频?
  8. 一个小时学会Maven
  9. 即将发布的 ASP.NET Core 2.2 会有哪些新
  10. 网络编程基础第四讲阻塞模型