根據Android developer pages,片段通過其主機活動通信。這往往會產生嚴格的片段< - >主機關係和即使是最簡單的事件傳播的詳細實現 - 它會變得更糟,如果你有多個收件人等。與其它片段溝通 - 替代設計
我想提出一種替代方法,我。請讓我知道,如果你看到它的問題,尤其是關於內存泄漏,因爲我有演員註冊一個單身人士。
總之,我有一個EventHub單身哪些片段張貼他們的事件,不關心,如果有任何人「在另一邊」聽着。
活動/片段監聽來自其它片段的事件::
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);
}
});
我的片段(或活性)與EventHub通過其處理程序實例註冊
不要重新發明輪子!有很多更經過測試的穩定解決方案,如巴士(EventBus,Otto)或FRP(rxjava)。 –