【问题标题】:Can a service receive its own broadcasts?服务可以接收自己的广播吗?
【发布时间】:2016-02-08 18:27:16
【问题描述】:

如果我有一个名为 MyService 的服务,它看起来像这样,该服务的 BroadcastReceiver 会从“sendData”方法接收自己的广播吗??

我基本上要问的是,如果我使用与广播接收器相同的 IntentFilter Constants.SERVICE 作为 Intent Action 向我的活动发送广播,是否会有问题?

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);
    }
}

【问题讨论】:

  • 不,不会有任何问题。
  • 你为什么要这么做……不会有任何问题
  • 哦,很高兴听到这个消息,我只是担心如果服务收到自己的广播会发生错误。

标签: android android-intent broadcastreceiver


【解决方案1】:

正如 Adil Soomrorupesh jain 所说,这显然不会成为问题,因为服务无法接收自己的广播。

编辑

其实经过实验我发现如果BroadcastReceiver与广播意图有相同的IntentFilter,服务可以接收自己的广播。

【讨论】:

    【解决方案2】:

    你当然可以试试这个,但这似乎完全没有必要。请记住,您所提议的不是让服务接收自己的广播(服务不接收任何广播),而是您定义了一个广播接收inside服务,那就是接收广播的对象。

    如果您尝试在组件之间进行通信,最好使用 LocalBroadcastManager 或某种事件总线,因为您的广播将发送到所有可能正在监听的应用程序,而不仅仅是这个应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多