我的MainActivity
有Drawer
并实例化新的Fragment
,具体取决于点击的MenuItem
(基于this tutorial)。
我监控内存,每次更改片段时略微增加,我担心,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()
}
我怎样才能避免内存泄漏或这是否相关?
谢谢!
答案 0 :(得分:1)
实际上,该代码没有问题。你可以优化的事情是:
Fragment#instantiate()
方法(检查docs)Map
之类的方式缓存实例,以便每次浏览抽屉时都不创建新实例此外,您可以使用FragmentManager#findFragmentById()
或FragmentManager#findFragmentByTag()