与其他碎片沟通 - 替代设计

时间:2013-11-03 10:21:28

标签: android android-fragments singleton communication

根据Android developer pages,片段通过其主机活动进行通信。这倾向于产生刚性片段< - >。甚至最简单的事件传播的主机关系和冗长的实现 - 如果你有多个收件人等,它会变得更糟。

我想提出另一种方法,这对我有用。如果你发现它有问题,请告诉我,特别是关于内存泄漏,因为我有演员注册单身人士。

总之,我有一个EventHub单例,它会将事件发布到片段,而不是关心是否有人“在另一边”。我的片段(或活动)正在向EventHub注册,传递其Handler实例:

活动/片段侦听来自其他片段的事件:

public void onResume()
{
    super.onResume();

    // Register self with the hub and start receiving events
    EventHub.getInstance().register( handler_ );
    ...
}

/** Don't leak handlers. */
@Override
public void onPause() {
    // Remove self from the event hub.
    EventHub.getInstance().unregister( handler_ );
}

/** Dispatch events. */
private Handler handler_ = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch( msg.what ) {
            ....
        }
    }
};

片段发射事件:

    button.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                EventHub.getInstance().post( Message m );
            }
        });

1 个答案:

答案 0 :(得分:2)

我建议你看看功能反应式编程,而不是开发自己的方法。完全针对您描述的问题创建了Observable和朋友。此外,只要你遵守规则,你就不必过多考虑内存泄漏。

以下是针对初学者的教程:http://mttkay.github.io/blog/2013/08/25/functional-reactive-programming-on-android-with-rxjava/但Google还有更多话要说:https://www.google.hu/search?q=android+rxjava

这不是一个神奇的解决方案,初看起来相当复杂,但如果你掌握了这个想法,那么它将有助于使你的软件更简单,更安全。

否则,我不会发现您提出的解决方案存在许多问题,但很难保持注册的一致性。