2016-03-02 50 views
1

我是全新的使用事件總線從otto庫,到目前爲止,我創建了一個事件總線Singleton類,我在我的代碼的幾個部分使用。現在我正在研究片段視圖,但我仍然有一個問題,關於:在碎片上調用register/unregister eventbus的最佳方法是什麼?

何時是註冊/取消註冊我的事件總線的最佳時間?

在幾篇文章中,我讀了onStart()和onStop(),但沒有任何具體原因。

public class SomeFragment extends Fragment { 
    @Override 
    public void onStart() { 
     super.onStart(); 
     EventBusSingleton.register(this); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     EventBusSingleton.unregister(this); 
    } 
} 

如果我按照與執行調用onResume()和onPause()的活動相同的方法,也可以正常工作。

public class SomeFragment extends Fragment { 
    @Override 
    public void onResume() { 
     super.onResume(); 
     EventBusSingleton.register(this); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     EventBusSingleton.unregister(this); 
    } 
} 

每種呼叫方式可能存在哪些潛在風險(如果存在)?

回答

3

onPause()/onResume()在您的活動不再具有焦點但仍可以看到的時候被調用(想想活動頂部的對話框或警報)。

onStop()/onStart()在您的活動不再可見時被調用。

要使用哪一個取決於您的用例。我認爲在暫停狀態下執行回調並不是一個真正的問題,因此我只需將註冊/取消註冊放入onStop()/ onStart()中,但是如果您確實想確認,可以將它們放入onPause() /的onResume()。