【发布时间】:2017-10-06 19:33:11
【问题描述】:
我的MainActivity 有一个Drawer 并实例化一个新的Fragment,具体取决于点击的MenuItem(基于this tutorial)。
我监控了 内存,它在每次 Fragment 更改时略微增加,我担心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 块了。
标签: java android android-fragments memory-leaks