Broadcast广播

2016-10-26  本文已影响0人  A_Coder

Broadcast是一种广泛运用的、在应用程序之间传输信息的机制,一个广播可以有任意个接收者。广播机制是一个典型的发布-订阅模式,也就是观察者模式。广播最大的特点是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的,通过这样的形式来达到接、收双方的完全解耦。
Android广播机制包含3个基本要素,分别是用于发送广播的Broadcast、接收广播的BroadcastReceiver以及用于传递信息的Intent。

首先我们需要定义一个广播接收器:

public class HelloBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){
        Toast.makeText(context, "hello", Toast.LENGTH_LONG).show();
    }
}

注册广播有两种:

<receiver android:name=".broadcast.HelloBroadcastReceiver">
<intent-filter>
      <action android:name="hello">
</intent-filter>
</receiver>

里面receiver的android:name是广播接收处理的类,这个类需要继承BroadcastReceiver。然后action的android:name的是接收intent哪些广播。

private void registerHelloBroadcast(){
    registerReceiver(new HelloBroadcastReceiver(), new IntentFilter(HELLO_ACTION));
}

注册之后就可以发送广播了:

private void sendNormalBroadcast(){
    sendBroadcast(new Intent(HELL_ACTION));
}

然后就会调用HelloBroadcastReceiver的onReceive函数,在该函数中执行相关代码操作即可。


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

<receiver android:name".broadcast.HelloBroadcastReceiver">
    <intent-filter android:priority="100">
        <action android="hello">
    </intent-filter>
</receiver>
```
发送有序广播:
private void sendOrderBroadcast(){
    sendOrderedBroadcast(new Intent(HELLO_ACTION),  null);
}
***
**本地广播(LocalBroadcastManager)**
当我们并不需要把自己所有应用内的信息广播给所有应用,而只在进程内使用,使用LocalBroadcastManager就能够实现。

| 函数|   作用  |
| ------------- |:-----------------:|
|LocalBroadcastManager.getInstance(context).registerReceiver(receiver,intentFilter) |注册Receiver |
|LocalBroadcastManager.getInstance(context).unregisterReceiver(receiver)| 注销Receiver |
| LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(HELLO_ACTION))  | 发送异步广播|
| LocalBroadcastManager.getInstance(context).sendBroadcastSync(new Intent()) |发送同步广播|
上一篇下一篇

猜你喜欢

热点阅读