Android:我使用BroadcastReceiver错了吗?

时间:2017-12-05 21:59:20

标签: android broadcastreceiver android-broadcastreceiver

我想描述一下我的应用程序中的通信是如何工作的,希望有人可以告诉我它是好/坏/只是设计好。

我的应用是单个活动多个片段。 Activity有几个通用函数,例如在屏幕上显示/隐藏Progressbar动画或显示Snackbar。这个功能只能在一个地方实现。

我的片段只要需要片段中没有的功能就会发送广播。例如,如果Fragment想要显示Snackbar消息,我会发送这样的广播:

localBroadcastManager.sendBroadcast(new SnackBarIntent("Show this text"));

活动接收此广播,并显示Snackbar消息。当然,这是单向信息。我的片段不知道是否收到广播。但总而言之,它确实有效。我可以从任何地方发送广播,服务,适配器等。如果我愿意,我也可以在片段之间发送广播。

我知道有其他选择。有一个EventBus。或者我可以将活动的引用传递给片段,适配器等。对我来说,这听起来像一个可怕的想法,可能会阻止正确的垃圾收集。

然后是RxJava,我猜我的片段订阅了我从Activity获得的Observable。

但问题仍然存在,以这种方式使用BroadcastReceiver是不是很糟糕?如果是这样,为什么?

1 个答案:

答案 0 :(得分:1)

是不是错了?不,他们是为了这样的事情。为了提高效率,我确保使用的是本地广播,而不是全球广播。一些替代方案可能提供更好的API或更多功能,但它们或多或少都做同样的事情。

我会说,除非广播的代码部分真的被埋没了,否则接口和方法调用比广播更好。任何类型的事件广播的问题在于它解耦发送者和接收者。当您需要通过多个级别或不应该知道系统的该部分的位置传递对象时,这可能会有优势。但它在维护方面存在缺陷,特别是如果多个地方可以在同一总线上放置类似的消息。