Android 显式广播与隐式广播
在Android开发中,广播(Broadcast)是一种用于组件间通信的机制。它允许一个组件发送一个广播消息,其他组件可以接收并处理这个消息。广播可以分为显式广播和隐式广播。
什么是广播
广播是一种事件通知机制,用于在应用内或应用间传递消息。它可以让应用的不同组件相互通信,无论组件处于同一应用内还是不同应用间。
广播分为两种类型:显式广播和隐式广播。
显式广播
显式广播是指发送者明确指定接收者的一种广播方式。发送者知道接收者的包名和类名,并将广播消息直接发送给该接收者。
使用显式广播时,首先需要指定接收者的类名或组件名,然后通过创建Intent
对象,指定广播的动作(Action)以及其他参数,最后调用sendBroadcast()
方法发送广播。
下面是一个示例代码:
// 发送广播
Intent intent = new Intent();
intent.setAction("com.example.MY_ACTION");
intent.putExtra("message", "Hello, World!");
sendBroadcast(intent);
// 接收广播
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
// 注册广播接收者
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.MY_ACTION");
registerReceiver(receiver, filter);
上述代码中,发送者创建了一个Intent
对象,并指定了广播的动作为com.example.MY_ACTION
,通过putExtra()
方法添加了一个额外的消息参数,然后调用sendBroadcast()
方法发送广播。
接收者创建了一个继承自BroadcastReceiver
的广播接收者类,并重写了onReceive()
方法,在这个方法中处理接收到的广播消息。
最后,通过创建一个IntentFilter
对象,并指定要接收的广播动作,调用registerReceiver()
方法注册广播接收者。
显式广播主要用于应用内的组件通信,因为发送者明确地知道接收者的信息。
隐式广播
隐式广播是指发送者不需要明确指定接收者的一种广播方式。发送者只需要指定广播的动作(Action),系统会自动将符合该动作的接收者进行匹配和通知。
使用隐式广播时,发送者只需要创建Intent
对象,并指定广播的动作,然后调用sendBroadcast()
方法发送广播。
下面是一个示例代码:
// 发送广播
Intent intent = new Intent();
intent.setAction("com.example.MY_ACTION");
intent.putExtra("message", "Hello, World!");
sendBroadcast(intent);
// 接收广播
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
// 注册广播接收者
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.MY_ACTION");
registerReceiver(receiver, filter);
与显式广播类似,发送者创建了一个Intent
对象,并指定了广播的动作为com.example.MY_ACTION
,通过putExtra()
方法添加了一个额外的消息参数,然后调用sendBroadcast()
方法发送广播。
接收者同样需要创建一个广播接收者类,并重写onReceive()
方法,在这个方法中处理接收到的广播消息。
最后,通过创建一个IntentFilter
对象,并指定要接收的广播动作,调用registerReceiver()
方法注册广播接收者。
隐式广播主要用于系统级别的通信,例如电池电量变化、网络连接状态变化等系统事件,应用可以通过注册接收器来获取这些事件的通知。
序列图
下面是一个使用显式广播的序列图示例:
sequenceDiagram
participant Sender