2013-11-03 30 views
0

根據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通過其處理程序實例註冊
+0

不要重新發明輪子!有很多更經過測試的穩定解決方案,如巴士(EventBus,Otto)或FRP(rxjava)。 –

回答

2

除了開發自己的方法,我建議你看看官能團反應性編程。觀察對象和朋友是爲了你描述的問題而創建的。此外,只要遵循規則,您不必過多考慮內存泄漏問題。

下面是對於初學者教程:http://mttkay.github.io/blog/2013/08/25/functional-reactive-programming-on-android-with-rxjava/但是谷歌更是把說些什麼:https://www.google.hu/search?q=android+rxjava

這不是一個神奇的解決方案,它的第一眼看上去非常複雜,但如果你掌握的想法,那麼它將有助於使您的軟件更簡單,更安全。

否則我看不出有許多問題與您提出的解決方案,但它會很難保持記錄一致。