调用方法启动代码或使用事件总线

Call Method to initiate code or use event bus

我正在使用广播接收器将数据发送到活动和片段。 该数据要么主要用于 information/display 目的,要么用于激活 fragment/activity.

中的某些代码

使用事件总线将数据直接获取到片段中与仅从主机 activity 中点击片段中的方法以发送 data/activate 代码相比,advantages/disadvantages 有什么区别?

这是非事件总线方式....

 public class loqooBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
           if (intent.getAction().equals("tv.SCENE")) {
             try {
                message = (JSONObject) 
                   new JSONTokener(intent.getStringExtra("message")).nextValue();
                sceneId = message.getString("scene_sceneid");
                if (sceneId == lastSceneId){
                    return;
                }
                channel = message.getString("channel");
                args.putString("json", message.toString());
            } catch (JSONException e) {

            }
            lastSceneId = sceneId;
            pushToFeedFromActivity(message);
      }

意图来自服务,这只是一条来自外部的 json 消息。

我应该通过事件总线将消息从服​​务发送到它的预定目的地(片段)还是让一切都好起来?

我建议使用事件总线。如果您以后需要另一个 fragment/activity 中的数据,它会变得容易得多,您只需订阅该事件即可。它还会处理很多烦人的事情,比如如果你的片段已经被 gc 了怎么办。使代码更清晰,更易于遵循。

这篇 post 几乎回答了我的问题并指导了我的未来。

http://nerds.weddingpartyapp.com/tech/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/

这些天我遇到的几乎所有问题都可以归结为一个词......脱钩!

我目前正在一个不小的应用程序中使用 Otto,我必须说它很酷。该项目有不同的构建类型和风格,一些用例可以非常优雅地解决——例如在调试和生产构建中以不同方式处理事件(通过具有不同的订阅者)。

这是使用事件/事件总线的巨大优势。

不利的一面是,一切都相当脱钩。虽然这听起来像是对事件总线的争论,但实际上并非总是如此。很容易使程序流看似随机地跳来跳去,而调试可能会成为真正的难题。重构是另一个问题 - 这可能不像没有事件浮动那样直接。

我的建议:使用它,但不要过度使用它。如果两个合作者有一种直接的交流方式,那就更好了。但是不要分离实际上属于一起的东西。