【问题标题】:Call Method to initiate code or use event bus调用方法来启动代码或使用事件总线
【发布时间】:2015-01-13 00:08:34
【问题描述】:

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

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

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

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

intent 是从一个服务进来的,它只是一个 json 消息,来自外部。

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

【问题讨论】:

  • 一些示例代码在这里会很有用
  • “使用事件总线,发布者可以免除这些职责,这种独立性会有所帮助,因为发布者和订阅者不需要在其中编写逻辑来建立两者之间的依赖关系。” - nerds.weddingpartyapp.com/tech/2014/12/24/…

标签: java android android-fragments broadcastreceiver event-bus


【解决方案1】:

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

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

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

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

【讨论】:

  • 您的想法。事件的复杂性正合我意。我所有的应用程序都非常关注具有多种风格的多个片段。将事件总线概念添加到我的设置中就是答案!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2013-12-04
      • 2017-11-10
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多