1
我的MainActivity
具有Drawer
並實例化新的Fragment
,具體取決於點擊的MenuItem
(基於this tutorial)。Android/Java:片段實例化會導致內存泄漏?
我監視的內存,這是略微上的每個片段變化而增加我擔心,fragmentClass.newInstance()
是不正確的做法。
// MainActivity
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
Fragment fragment = null;
Class fragmentClass = null;
if (id == R.id.nav_camera) {
fragmentClass = CameraFragment.class;
} else if (id == R.id.nav_gallery) {
fragmentClass = GalleryFragment.class;
} else if (id == R.id.nav_slideshow) {
fragmentClass = SlideshowFragment.class;
} else if (id == R.id.nav_manage) {
fragmentClass = ManageFragment.class;
} else if (id == R.id.nav_share) {
fragmentClass = ShareFragment.class;
} else if (id == R.id.nav_send) {
fragmentClass = SendFragment.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.layout_main, fragment).commit();
}
我希望是這樣的:
// Pseudocode
if (fragmentManager.instanceExists(fragmentClass)) {
// load instantiated fragment
} else {
// newInstance()
}
我怎麼能避免內存泄漏,或者這甚至關係?
謝謝!
檢查片段管理器中是否存在片段只需觀察一下'fragmentClass = CameraFragment.class'就可以寫成像'fragment = CameraFragment.newInstance()'。它有點乾淨,你可能不會再需要try catch塊了。 – petey