当前位置: 代码迷 >> Android >> 小弟我的android 第32天 - 广播接收者-BroadcastReceiver(二)
  详细解决方案

小弟我的android 第32天 - 广播接收者-BroadcastReceiver(二)

热度:130   发布时间:2016-04-28 07:05:42.0
我的android 第32天 - 广播接收者--BroadcastReceiver(二)

? ?我的android 第32天 - 广播接收者--BroadcastReceiver(二)

?

二、Android广播机制三个基本要素

??广播(Broadcast-----?用于发送广播

??广播接收器(BroadcastReceiver-----?用于接收广播

??意图内容(Intent-----?用于保存广播相关信息的媒介

?

?

?

?

?

?

?

?

首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如ActionCategory)装入一个Intent对象,把Intent对象以广播的方式发出去。当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的Intentfilter是否与发送的Intent相匹配,若匹配就会调用BroadcastReceivervoidonReceive(Context?curContext, Intent?broadcastMsg)方法,运行完毕,销毁。

?

广播被分为两种不同的类型:“普通广播(Normalbroadcasts)”和“有序广播(Orderedbroadcasts)”。前者是完全异步的,所有接收者(逻辑上)都在同一时刻运行,对消息传递的效率而言这是很好的做法,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;然而后者是逐个执行接收者——系统会按照接收者声明的优先级别(声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-10001000。也可以调用IntentFilter对象的setPriority()进行设置),按顺序逐次执行。

?

Context.sendBroadcast()

?? 发送的是普通广播,所有订阅者都有机会获得并进行处理。

?

Context.sendOrderedBroadcast()

?? 发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。对于有序广播,前面的接收者可以将处理结果存放进广播Intent,然后传给下一个接收者。

?

?

?

下载视频代码

  相关解决方案