Mon MainActivity
a un Drawer
et instancie un nouveau Fragment
, en fonction du MenuItem
cliqué (basé sur this tutorial).Android/Java: l'instanciation de fragments provoque des fuites de mémoire?
J'ai suivi la mémoire, qui est en légère augmentation à chaque changement de Fragment et je vous inquiétez pas, ce fragmentClass.newInstance()
n'est pas la bonne façon.
// 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();
}
Je me attends quelque chose comme:
// Pseudocode
if (fragmentManager.instanceExists(fragmentClass)) {
// load instantiated fragment
} else {
// newInstance()
}
Comment pourrais-je éviter les fuites de mémoire ou est ce même lié?
Merci!
Juste une observation, 'fragmentClass = CameraFragment.class' pourrait être écrit comme 'fragment = CameraFragment.newInstance()'. C'est un peu plus propre et vous n'aurez probablement plus besoin d'un bloc d'essai. – petey