1

我在我的應用程序中使用片段,我懷疑每次添加和刪除片段時,是否在刪除片段垃圾時收集?片段垃圾收集

這裏是我的代碼:

中的onCreate

()

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.add(detailFragmentID, new MyDetailFragment()); 
fragmentTransaction.add(fragmentID, new MyListFragmentt()); 
fragmentTransaction.commit(); 
在onRestart

()

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
Fragment previousFragment = getSupportFragmentManager().findFragmentById(detailFragmentID); 
if (previousFragment != null) { 
    fragmentTransaction.remove(previousFragment); 
} 
fragmentTransaction.add(detailFragmentID, new MyDetailFragment()); 
fragmentTransaction.commitAllowingStateLoss(); 

這裏的時候,我去一些活動,回來onRestart將被調用。

通過每次添加和刪除片段,是否在這裏收集片段垃圾?

[格式化代碼正確]

回答

0

GC會按自己的計劃運行,除非你專門致電一些Objectfinalize()方法。所以,我認爲您在刪除Fragment時不需要擔心GC

0

垃圾收集將在有需要的時候自動收集對象,並收集內存中未使用的資源。

使用remove方法刪除Fragments只會從堆棧中刪除片段,而不是從內存中刪除。您不能確定GC將從內存中一次刪除它,因爲我們稱之爲刪除片段的方法。

因此,通過每次添加和刪除Fragment,您不能說它總是從內存GC

0

很難知道它是否是GC'd。我認爲你真正要問的是,片段是否爲,標記爲(即將在稍後獲得GC'd)。

檢查這個最簡單的方法是在你的Fragment的onDestroy()方法中放置一個斷點,看看是否有被調用。你可以放心,如果系統「摧毀」你的碎片,它最終會得到GC'd。

+1

最後的說法不完全正確,是嗎?一旦onDestroy()被調用,但片段的'this'仍然在某處引用片段將不被GC'd。來源:http://blog.nimbledroid.com/2016/05/23/memory-leaks.html – Voy

+0

@Voy你是絕對正確的。我會更新我的答案。 – tir38