Je suis jeter un oeil à cet exemple https://developer.android.com/training/location/retrieve-current.html#CheckServicesMessage d'erreur Google Play Services fuite de mémoire potentielle?
Voici le code en question:
public class MainActivity extends FragmentActivity {
...
private boolean servicesConnected() {
...
if (ConnectionResult.SUCCESS == resultCode) {
...
// Google Play services was not available for some reason.
// resultCode holds the error code.
} else {
// Get the error dialog from Google Play services
Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(
resultCode,
this,
CONNECTION_FAILURE_RESOLUTION_REQUEST);
...
}
}
}
Si nous jetons un coup d'œil à GooglePlayServicesUtil.getErrorDialog(..)
nous passons une référence à this
qui se trouve être un Activity
.
La question est: Est-ce que cela causerait une fuite de mémoire lors d'un changement de configuration?
Je suppose que la réponse dépend de comment/si GooglePlayServicesUtil.getErrorDialog(..)
conserve la référence à Activity
en interne.
Cela résout la fuite de mémoire, mais il est une expérience utilisateur médiocre. Changer ce qui est à l'écran lors d'un changement de configuration est une expérience utilisateur médiocre. –
Ce serait mauvais si la boîte de dialogue ne devait pas apparaître exactement comme avant la modification de la configuration. C'est là que onResume entre en jeu. Dans cet exemple, c'est bien parce que la boîte de dialogue GPS réapparaît de toute façon. Pour les autres boîtes de dialogue, il suffit de paramétrer un booléen si la boîte de dialogue est affichée, puis de l'afficher à nouveau via le bouton Reprendre et restaurer les variables via onSavedInstanceState que l'utilisateur modifie dans la boîte de dialogue. C'est pourquoi je préfère que le code de dialogue dans cette méthode privée rende les choses plus faciles et plus organisées – user3364963