décembre
2011
Sur Android, l’orientation de l’écran influe sur l’affichage des applications.
L’Android SDK offre la possibilité aux écrans de s’adapter à la résolution par ces systèmes de gravité (sorte de point d’ancrage).
Je crée mon application et je m’amuse à la passer du mode portrait au mode paysage.
Cette application se connecte en TCP à mon PC, et rapidement je me suis rendu compte que mon application se comporte étrangement.
En effet, à chaque changement d’orientation, ma connexion TCP se renouvelle. Après plusieurs heures d’analyses et de recherches j’ai compris et résolu le problème.
Par défaut, à chaque changement d’orientation, l’Activity courante est détruite puis recréé par le système Android.
Imaginez ma frustration en constatant cela, où sont mes objets en mémoires -> disparu….
Je connais deux solutions à ce problème:
- Surcharger la méthode onRetainNonConfigurationInstance pour en sauvegarder un seul objet. Je dé-conseil ce n’est vraiment pas pratique
- Surchager la méthode OnConfigurationChanged
Le fait de surcharger la méthode OnConfigurationChanged et de définir la propriété ConfigurationChanges au Manifeste permet de ne plus redémarrer l’activité courante en cas de changement d’orientation.
TIPs: en java, les propriétés ConfigurationChanges se trouve dans le fichier AndroidManifest.xml du projet. Sous Mono for Android c’est dans l’entête de votre définition de la classe qu’il se trouve.
Exemple:
public class FrmTest : Activity
{
/// <summary>
/// Permet de ne plus redemarrer l'activité sur un changement de configuration
/// </summary>
/// <param name="newConfig"></param>
public override void OnConfigurationChanged(Configuration newConfig)
{
base.OnConfigurationChanged(newConfig);
}
}
Cette petite astuce vous permettra sans doute de gagner du temps :).
Commentaires récents
- Mono for Android dans
- Mono for Android dans
- [Mono]Asynchrone Mon meilleur ennemi dans