2015-07-20 45 views
1

有三個活動ABC我可以在活動溝通中使用EventBus嗎?

  1. 註冊EventBus在活動A onCreate(),並註銷在onDestroy()和方法onEvent(TestEvent e);

  2. 活動A開始活動B

  3. 活動B開始活動C

  4. 在活動C

    EventBus.getDefault().post(new TestEvent("close A")); 
    

我用EventBus以這種方式,並且它工作得很好。我的代碼有什麼問題嗎?

+0

如果運作良好,問題的目的是什麼? – DDsix

+0

我的同事說我不能用這種方式使用EventBus,而且我不確定用這種方式使用EventBus是好的。由於活動生命週期問題,我把註冊放在onCreate()並註銷onDestroy()。 –

回答

1

沒關係。 EventBus是線程安全的,並且有很多方法使它更容易處理,例如onEventMainThread,onEventBackgroundThread,onEventAsync。

你的代碼是這樣的:你的活動即使在後臺也會繼續得到事件。這沒關係(在這種特殊情況下)。但是,如果你要實現在未來別的東西,記住這一點:

  • 的onCreate註冊 - >的onDestroy註銷
  • 在onStart註冊 - >的onStop註銷
  • 的onResume註冊 - >的onPause取消註冊

還有其他的東西:您必須確保您的活動只註冊一次。因爲,如果您多次註冊,您將收到與寄存器數量一樣多的事件。因此,請修改寄存器:

if (!EventBus.getDefault().isRegistered(this)) { 
    EventBus.getDefault().register(this); 
} 

如果您需要更多的信息,請閱讀更多有關EventBus here

但是,如果您遵循這些簡單的規則,您的活動的生命週期。我使用它很多,我不會遇到問題。

相關問題