2014-02-27 41 views
1

我在Android支持庫v7中使用Fragment類。在我的ActivityonCreate()方法中,我創建了一堆碎片並將它們存儲到我的活動的屬性中。在onDestroy()被調用後重用Fragment是否安全?

this.firstFragment = new FirstFragment(); 
this.secondFragment = new SecondFragment(); 
// and so on 

我使用導航抽屜模式在我的應用程序的片段之間切換。要更改活動片段,請使用以下代碼。

// Replace the current content of the fragment holder with the selected section fragment. 
FragmentManager fragmentManager = getSupportFragmentManager(); 
fragmentManager.beginTransaction().replace(R.id.container, selectedFragment).commit(); 

這會導致調用onDestroy()刪除的片段。在調用onDestroy()之後重用片段是否安全,或者每次向用戶顯示片段時是否應該重新創建片段。

這是片段的至少一個的時間與內存消耗問題,需要得到創造了一些時間。

+0

只要你還在使用你的片段,你的onDestory將不會被調用。一旦管理片段的活動被破壞,它就會被調用。 – Eenvincible

+0

活動沒有被銷燬('onDestroy()'沒有被調用)。只有我的片段上的'onDestroy()'被調用。任何人都可以證實這種行爲,所以我們可以消除我做錯了什麼? 此外,開發人員指南的片段的生命週期的描述暗示的onDestroy()應活性運行即使當被調用(「片段的生命週期(而其活動運行)」)。 –

回答

3

onDestroy功能是摧毀所有的變量和所消耗的內存。所有這些將被標記爲虛擬數據以使garbage collector在需要時將其從內存中移除。

調用onDestroy後再次調用Fragment會從一開始就再次通過週期通過onCreate,所有的variables和地方object將再次重新初始化。

安全嗎?是的,它是安全的。

您想更深入的來處理已經由OS處理的FragmentlifeCycle

如果你想防止Fragment被破壞,你可以創建爲static對象。

+1

我很好,這個答案,再加上使片段靜態的提示是一個很好的解決我目前的問題。謝謝。 –

1

Fragments developer guide似乎在告訴沒有,根據生命週期圖。

如果你想保留你的片段供以後使用,我建議你使用FragmentTransaction.detach(Fragment)FragmentTransaction.hide(Fragment)而不是FragmentTransaction.remove(Fragment)

相關問題