根据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 );
}
});
答案 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
这不是一个神奇的解决方案,初看起来相当复杂,但如果你掌握了这个想法,那么它将有助于使你的软件更简单,更安全。
否则,我不会发现您提出的解决方案存在许多问题,但很难保持注册的一致性。