0

我正在使用广播接收器将数据发送到活动和片段。该数据主要用于信息/显示目的或激活片段/活动中的某些代码。

使用事件总线将数据直接获取到片段中与仅从主机活动中点击片段中的方法以发送数据/激活代码的优点/缺点是什么?

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

 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 消息。

我应该通过事件总线将消息从服​​务发送到其预期目的地(片段)还是不理会?

4

3 回答 3

1

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

于 2015-01-13T00:46:12.367 回答
1

这篇文章几乎回答了我的问题并为我的未来提供指导。

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

这些天我几乎所有的问题都归结为一个词……脱钩!

于 2015-01-13T00:47:31.133 回答
1

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

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

不利的一面是,一切都非常脱钩。虽然这听起来像是 eventbus 的论据,但实际上并非总是如此。很容易让程序流程看似随机地跳来跳去,调试可能会成为一件真正令人头疼的事情。重构是另一个问题——这可能不像没有事件浮动那样直接。

我的建议:使用它,但不要过度使用它。如果有两个合作者交流的直接方式更喜欢那个。但不要将实际上属于一起的事物解耦。

于 2015-01-13T00:49:42.290 回答