BroadCast三种方式

作为android 的四大基本组件之一的 BroadCast Receiver,是进行进程间通信的重要手段,几乎所有的应用都会注册和发送各种不同的intent, 那么有一个问题,你是否了解Intent?  作为延伸,我们需要了解一下 sendBroadcast()  / sendOrderedBroadcast() /  sendStickyBroadcast() 这三个方法的不同。

1)sendBroadcast: 最普通的发送intent的方式,是一种无序的广播机制,理论上,所有的接受者同时获得该intent的消息, 接受者之间不存在先后顺序, 不能截断/修改intent的数据。 应用普遍使用的就是该方式。

2)sendOrderedBroadcast: 是有序的发送广播的机制,所有接受者都可以设置priority , 按照priority 的大小顺序进行传递, 上一个优先级的接受者,可以截断和修改intent里面的数据。 同时,也可以设置一个最后接收者(总是在最后一个接收到这个intent,用来做一些特定的功能)。

3)sendStickyBroadcast: 是一种粘性广播。所谓的粘性是指,这个intent 没有周期限制, 一般的intent 只能发送给当前已经注册了这个监听的receiver,一旦发送完毕就会失去作用周期,而粘性广播没有这个限制,即便后来注册的intent也可以收到这个广播。 需要注意的一点是 这种发送方式不会导致ANR, 因为它没有发送时间的限制。
 

UserHandle.ALL、UserHandle.CURRENT、UserHandle.CURRENT_OR_SELF、UserHandle.OWNER的定义与区别

  •     UserHandle.ALL  -------------设备上所有用户均可接收到广播
  •     UserHandle.CURRENT  ----------------设备上当前用户可接收到广播
  •     UserHandle.CURRENT_OR_SELF  ----------设备上当前用户或者该应用所属用户可接收到广播 
  •     UserHandle.OWNER  ------------------设备所有者可接收到广播
     

如: sendBroadcastAsUser(intent, UserHandle.OWNER);

发送,使用sendStickyBroadcast 发送广播需要获得BROADCAST_STICKY permission,如果没有这个permission则会抛出异常。

Intent intent = new Intent("com.android.action.sticky.broadcast");
intent.putExtra("sent_count", mStickyBrcCount);
mContext.sendStickyBroadcast(intent,UserHandle.ALL);

接收


 private BroadcastReceiver  mReceiver = new BroadcastReceiver () {
  @Override
  public void onReceive(Context context, Intent intent) {
   final String action = intent.getAction();
   int count = intent.getIntExtra("sent_count", -1);
   Log.d(TAG, "action = " + action + "and count = " + count);
   
   //context.removeStickyBroadcast(intent);
  }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值