2015-05-27 37 views
3

我執行MVP在Android的模式,我使用EventBus讓知道,從活動的「A」的東西的P resenter發生在活動「B」,以更新事件總線註銷來自「A」的意見。是必要的

我註冊的主持人EventBus裏面的構造函數,但我沒有看到任何我可以取消註冊的地方。

public class PresenterA extends nucleus.presenter.Presenter<ViewA> { 

    public PresenterA() { 
     EventBus.getDefault().register(this); 
    } 

    public void onEvent(ChangesEvent e) { 
     // change views 
    } 
} 
  1. 是否有必要註銷所有,當主持人是假設住,只要應用程序(它沒有重新上配置變化)?
  2. 當用戶離開應用程序時(關閉活動「A」),引用將被釋放還是內存泄漏?
+1

了'Application'並沒有真正結束,直到安卓殺死它按照HTTP://計算器.com/a/27193094/2413303,但有一個不能死的引用大多會成爲View層次結構(Activities/Fragments)的問題。 – EpicPandaForce

+0

EventBus.getDefault()確實是一個靜態引用,但它保存對Activity關閉時與視圖分開的演示者的引用。這是否被認爲是內存泄漏? –

+0

此外,如果您未取消註冊,則某個公交事件處理程序中的某些UI代碼可能會嘗試呼叫已經回收或放置的視圖 – eduyayo

回答

1
  1. 註銷是重要的,當用戶離開應用程序,這並不意味着資源會立即清理
  2. 由於EventBus儲存靜態參考演示它不被釋放,直到OS殺死工藝等,被視爲泄漏。

至於這將是共同對onTakeView(ViewType view)註冊和註銷的onDropView()因爲事件處理改變了看法