Android进阶#(1/12)Android的构成基石——四大组件_Broadcast

来源:互联网 发布:内存优化级别禁用好吗 编辑:程序博客网 时间:2024/06/02 16:35
(1/12)Android的构成基石——四大组件_Broadcast


  1. Broadcast 是一种广泛运用的、在应用程序之间传递信息的机制。
  2. Android中广播与传统意义上的电台广播类似,一个广播可以有任意个接收者。
  3. 广播机制是一个典型的发布——订阅模式,也就是我们所说的观察者模式。
  4. 广播机制最大的特点就是发送方式并不关心接收方是否收到数据,也不关心接收方是如何处理数据的。

Android中广播机制包含3个基本要素:
  • 用于发送广播的Broadcast
  • 接收广播的BroadcastReceiver
  • 用于传递信息的Intent

Android中的广播:
  • 普通广播
  • 有序广播
  • 本地广播
  • Sticky广播
1.普通广播
完全异步,通过Context的 sendBroadcast()来发送,传递效率高,但receivers的执行顺序不确定。
首先我们需要定义一个广播接收器,示例:

第二步是注册广播,可通过AndroidManifest.xml(静态注册)或者代码进行注册(动态注册):
xml注册示例代码:

动态注册示例代码:
private void registerHelloBroadcast(){
registerReceiver(new HelloBroadcastReceiver(),
 new IntentFilter(HELLO_ACTION))
}
然后就会调用HelloBroadcastReceiver 的 onReceiver 函数,在该函数中执行相关操作即可。


2.有序广播


通过 Context.sendOrderedBroadcast()来发送。所有的广播接收器按照优先级依次执行。广播接收器的优先级通过 receiver 的 intent-filter 中的android:priority 属性设置,值越大越优先。
当广播接收到后,可使用 setResult()来将结果传给下一个广播接收器。
然后,通过getResult()函数来取得上个广播接收器返回的结果。
并可以用abortBroadcast()函数来让系统丢弃该广播,使它不再传到其它接收器。
设置优先级:

发送有序广播:
private void sentOrderBroadcast(){
sentOrderBroadcast(new Intent(HELLO_ACTION),
null)
}

3.本地广播

API21 的 v4包中增加了 LocalBroadcastManager
  • 解决全局广播将自己应用信息广播给所有应用程序的缺陷
  • 可在进程内广播限于应用内的广播
  • 避免了安全隐患

原创粉丝点击