Sobes.tech
Middle

Quelle est la spécificité du changement de positions sur la plateforme Android?

sobes.tech IA

Réponse de l'IA

Lors du changement de position (rotation de l'écran ou autres modifications de configuration) sur Android, l'Activity en cours est détruite et une nouvelle est créée.

Ce qui se passe :

  • Les cycles de vie de l'ancienne Activity sont appelés : onPause(), onStop(), onDestroy().
  • L'ancienne Activity est supprimée de la mémoire.
  • Une nouvelle Activity est créée.
  • Les cycles de vie de la nouvelle Activity sont appelés : onCreate(), onStart(), onResume().

Spécificités pour QA :

  • Perte de données : Les données non sauvegardées dans les champs de saisie, éléments sélectionnés dans les listes, etc., peuvent être perdues si leur sauvegarde n'est pas implémentée.
  • État de l'UI : La visibilité des éléments, la position du défilement, les onglets sélectionnés et autres états de l'UI peuvent revenir à leur état par défaut.
  • Opérations en arrière-plan : Les tâches en arrière-plan en cours (par exemple, le chargement de données) peuvent être interrompues ou mal terminées.
  • Performance : Plusieurs changements de configuration peuvent ralentir l'application en raison de la recréation constante de l'Activity.
  • Fuites de mémoire : Une mauvaise gestion des ressources (par exemple, les écouteurs non désinscrits dans onDestroy()) peut entraîner des fuites de mémoire.

Comment cela est géré par les développeurs (et ce que QA doit vérifier en premier) :

  • Sauvegarde de l'état : Utilisation de onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Exemple de sauvegarde des données dans onSaveInstanceState()
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Exemple de restauration des données dans onCreate()
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        if (savedInstanceState != null) {
            String savedText = savedInstanceState.getString("saved_text");
            if (savedText != null) {
                myEditText.setText(savedText);
            }
        }
    }
    
  • Gestion des changements de configuration : Déclaration de android:configChanges dans AndroidManifest.xml pour les cas où la recréation de l'Activity n'est pas nécessaire (scénario moins courant pour le changement d'orientation, mais utilisé pour d'autres changements de configuration).
  • Cycle de vie du ViewModel : Le ViewModel conserve son état lors des changements de configuration et n'est pas détruit avec l'Activity.
  • Fragments : Gestion correcte du cycle de vie des Fragments.

Tests spécifiques pour le changement de position :

  • Simulation de rotations sur différents appareils et émulateurs.
  • Test de sauvegarde et de restauration des données après changement de position.
  • Vérification de l'état de l'UI (visibilité, texte, défilement, éléments sélectionnés).
  • Test de l'interruption et de la reprise des tâches en arrière-plan.
  • Vérification des fuites de mémoire (utilisation d'Android Profiler).
  • Tests de stress : changements rapides et répétés de position.

Outils pour QA :

  • Android Studio (pour le débogage, la visualisation des logs, l'utilisation de Profiler).
  • commandes adb pour simuler des rotations.
  • différents émulateurs et appareils réels avec différentes résolutions et versions d'Android.