Android四大组件之一的BroadcastReceiver是Android系统中一个关键的部分,它扮演着全局监听器的角色,用于监听并处理系统发送的广播消息。广播机制在Android中是一种消息订阅与发布的模式,使得应用程序之间能够相互通信,实现跨组件的功能交互。
创建无序广播是通过Context.sendBroadcast(Intent)方法实现的,这种方法发送的是普通广播,这种广播是非同步的,能够在同一时间被所有注册的BroadcastReceiver接收到,因此具有较高的消息传递效率。然而,普通广播的一个缺点是接收者无法将处理结果传递给其他接收者,也不能主动终止广播的传播。
BroadcastReceiver的创建通常涉及继承BroadcastReceiver类,并重写onReceive()方法,这个方法会在接收到广播时被调用,接收者在此方法内进行相应的处理逻辑。例如:
```java
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 在这里编写接收广播后的具体操作
}
}
```
为了订阅特定的广播,开发者可以选择两种方式。首先,在AndroidManifest.xml文件中,通过<receiver>标签声明接收器,并设置<intent-filter>来指定接收的动作,如接收短信的到达事件:
```xml
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
```
另一种订阅方式是程序运行时动态注册接收器,通过IntentFilter和registerReceiver()方法:
```java
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
MyReceiver receiver = new MyReceiver();
registerReceiver(receiver, filter);
```
发送广播则涉及到创建一个Intent对象,指定广播的Action(比如ACTION_NEW_OUTGOING_CALL),然后使用Context.sendBroadcast(Intent)发送出去。例如:
```java
Intent intent = new Intent(Intent.ACTION_NEW_OUTGOING_CALL);
intent.putExtra(Intent.EXTRA_PHONE_NUMBER, "13811479528");
Context.sendBroadcast(intent);
```
总结来说,BroadcastReceiver在Android开发中扮演了重要的角色,通过它,应用可以响应和处理来自系统或其他应用的各种事件,实现了跨组件间的通信,增强了Android应用的灵活性和扩展性。