服务可以接收自己的广播吗?
Can a service receive its own broadcasts?
如果我有一个名为 MyService 的服务,它看起来像这样,该服务的 BroadcastReceiver 是否会从 "sendData" 方法接收自己的广播??
我主要想问的是,如果我使用广播接收器的相同 IntentFilter Constants.SERVICE
作为 Intent Action 向我的 activity 发送广播,是否会出现问题?
MyService.java
public class PlayerService extends Service {
private FFmpegMediaPlayer mp;
private BroadcastReceiver receiver;
@Override
public void onCreate() {
super.onCreate();
...
registerReceiver(receiver, new IntentFilter(Constants.SERVICE));
...
}
...
public void sendData() {
Intent intent = new Intent(Constants.SERVICE);
sendBroadcast(intent);
}
}
正如 Adil Soomro 和 rupesh jain 提到的那样,这显然不会成为问题,因为该服务无法接收自己的广播。
编辑
实际上,在试验之后,我发现如果 BroadcastReceiver
具有与广播意图相同的 IntentFilter
,该服务可以接收自己的广播。
你当然可以试试这个,但这似乎完全没有必要。请记住,您提议的不是让服务接收自己的广播(服务不接收任何广播),而是定义广播接收 inside 服务这就是接收广播的内容。
如果您尝试在组件之间进行通信,最好使用 LocalBroadcastManager 或某种事件总线,因为您的广播将发送到所有可能正在收听的应用程序,而不仅仅是这个应用程序。
如果我有一个名为 MyService 的服务,它看起来像这样,该服务的 BroadcastReceiver 是否会从 "sendData" 方法接收自己的广播??
我主要想问的是,如果我使用广播接收器的相同 IntentFilter Constants.SERVICE
作为 Intent Action 向我的 activity 发送广播,是否会出现问题?
MyService.java
public class PlayerService extends Service {
private FFmpegMediaPlayer mp;
private BroadcastReceiver receiver;
@Override
public void onCreate() {
super.onCreate();
...
registerReceiver(receiver, new IntentFilter(Constants.SERVICE));
...
}
...
public void sendData() {
Intent intent = new Intent(Constants.SERVICE);
sendBroadcast(intent);
}
}
正如 Adil Soomro 和 rupesh jain 提到的那样,这显然不会成为问题,因为该服务无法接收自己的广播。
编辑
实际上,在试验之后,我发现如果 BroadcastReceiver
具有与广播意图相同的 IntentFilter
,该服务可以接收自己的广播。
你当然可以试试这个,但这似乎完全没有必要。请记住,您提议的不是让服务接收自己的广播(服务不接收任何广播),而是定义广播接收 inside 服务这就是接收广播的内容。
如果您尝试在组件之间进行通信,最好使用 LocalBroadcastManager 或某种事件总线,因为您的广播将发送到所有可能正在收听的应用程序,而不仅仅是这个应用程序。