我有兩個片段的活動,兩個片段中只有一個在給定時間顯示,如用戶所確定。這兩個片段都通過廣播接收器訂閱數據。保持片段廣播接收器即使在不在視圖中時也處於活動狀態
活動管理使用片段管理器的replace()方法顯示哪個片段,例如,
getFragmentManager().beginTransaction().replace(R.id.north_fragment, fragment1, FRAGMENT_TAG).commit();
該廣播接收機被登記在片段的onCreateView()重寫:如預期的廣播接收機接收相應的數據。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_spectrum_analyzer_graph, container, false);
setupGraphView(rootView);
// register for Spectrum Frame Response messages
myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive()");
// do stuff
}
}
廣播接收未登記在onDestroyView(),例如:
@Override
public void onDestroyView() {
super.onDestroyView();
getActivity().unregisterReceiver(m_spectrumDataFrameReceiver);
}
有沒有一種方法可以讓我保持片段通過廣播接收器接收數據,即使是不可見的(它已經經過破壞)?我希望接收器繼續獲取數據並將其存儲在片段中,即使片段不可見(但活動可見),但我知道我需要在某個時刻取消註冊廣播接收器。
當活動被銷燬(調用其活動註銷)時應該註銷嗎?還是在這裏太晚?我對Fragment lifecyle的複雜性相當陌生,我不太確定該怎麼做。
您可以將接收器註冊到您的活動中,因爲它始終存在,將數據發送到可見片段,並保留不可見的數據。當你顯示第二個片段時,讓它詢問他的數據的活動。 – ILovemyPoncho
這似乎增加了很多耦合。我覺得像一個片段應該避免知道它所附帶的活動的具體細節,或者它必須從中獲取信息。 –
如何在onCreate()/ onDestroy()上註冊/註銷接收者並將setRetainInstance()設置爲true? – ILovemyPoncho