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