2012-11-30 39 views
0

我有一個關於片段的存儲器含意存有疑問。這將是在內存方面的最優化的解決方案:存儲器含義片段創建(創建在每個片段中的事務)

1)創建用於每個片段一個對象和在事務管理器使用這些對象。

MyFragment myFrag=new MyFragment(); 
fragmentTransaction.replace(R.id.mainPager, myFrag); 

2)的事務管理器直接創建片段並留下垃圾收集器利用這個對象的賬戶,我的意思是這樣的:

fragmentTransaction.replace(R.id.mainPager, new MyFragment()); 

是否有這兩個選項之間有什麼區別就可能的內存泄漏和性能優化而言。

謝謝!

+0

你的意思是:MyFragment myFrag =新MyFragment(); fragmentTransaction.replace(R.id.mainPager,myFrag); –

+0

2)如果你搞砸了,它會更安全。 1)更好,如果你做得對,因爲你不必重新創建對象。右VS錯=分離片段不使用的內存很多的,並沒有更多的參考上下文,它可能會泄漏 – zapl

回答

1
MyFragment myFrag=new MyFragment(); 
fragmentTransaction.replace(R.id.mainPager, myFrag); 

這不會使內存負載加倍。 myFrag只是對新片段的引用,它只存儲片段的內存位置,因此過載可以忽略不計。

+0

我的疑問是,下一步,當用戶改變片段,我將有很強的參考片段。相反,使用選項2,我將有一個微弱的參考對象,因此在理論上,垃圾收集器將負責摧毀它。不是嗎? – rdiaz82

+1

它取決於創建myFrag的位置:如果它屬於片段主機活動的字段,則引用將保留,因此操作系統以自己的方式管理片段實例。但是,如果事務處於方法中,那麼myFrag是本地的,並在方法返回後獲取GC'd。這是你的問題嗎? – znat

+0

絕對是解決我的懷疑謝謝! – rdiaz82