Sobes.tech
Middle

Wat is de specificiteit van het wisselen van posities op het Android-platform?

sobes.tech AI

Antwoord van AI

Bij het wijzigen van posities (schermrotatie of andere configuratiewijzigingen) op Android wordt de huidige Activity vernietigd en wordt een nieuwe aangemaakt.

Wat gebeurt er:

  • De levenscyclusmethoden van de oude Activity worden aangeroepen: onPause(), onStop(), onDestroy().
  • De oude Activity wordt uit het geheugen verwijderd.
  • Een nieuwe Activity wordt aangemaakt.
  • De levenscyclusmethoden van de nieuwe Activity worden aangeroepen: onCreate(), onStart(), onResume().

Specifiek voor QA:

  • Gegevensverlies: Niet opgeslagen gegevens in invoervelden, geselecteerde lijstitems, enz., kunnen verloren gaan als ze niet worden opgeslagen.
  • UI-toestand: De zichtbaarheid van elementen, scrollposities, geselecteerde tabbladen en andere UI-toestanden kunnen worden teruggezet naar de standaardwaarden.
  • Achtergrondactiviteiten: Lopende achtergrondtaken (zoals gegevensladen) kunnen worden onderbroken of onjuist worden voltooid.
  • Prestaties: Meerdere configuratiewijzigingen kunnen de app vertragen vanwege het voortdurend opnieuw maken van de Activity.
  • Geheugenlekken: Onjuist omgaan met bronnen (zoals niet-afgemelde Listeners in onDestroy()) kan leiden tot geheugenlekken.

Hoe ontwikkelaars hiermee omgaan (en wat QA eerst moet controleren):

  • Toestand opslaan: Gebruik van onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Voorbeeld van gegevens opslaan in onSaveInstanceState()
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Voorbeeld van gegevens herstellen in 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);
            }
        }
    }
    
  • Afhandeling van configuratiewijzigingen: Declaratie van android:configChanges in AndroidManifest.xml voor gevallen waarin het niet nodig is om de Activity opnieuw te maken (minder gebruikelijk voor oriëntatiewijzigingen, maar wordt gebruikt voor andere configuratiewijzigingen).
  • Levenscyclus van ViewModel: Het ViewModel behoudt zijn toestand tijdens configuratiewijzigingen en wordt niet vernietigd samen met de Activity.
  • Fragmenten: Correct beheer van de levenscyclus van Fragmenten.

Specifieke tests voor positiewijzigingen:

  • Simulatie van rotaties op verschillende apparaten en emulators.
  • Testen van gegevens opslaan en herstellen na positiewijzigingen.
  • Controleren van de UI-toestand (zichtbaarheid, tekst, scroll, geselecteerde elementen).
  • Testen van onderbrekingen en voortzettingen van achtergrondtaken.
  • Controleren op geheugenlekken (gebruik van Android Profiler).
  • Stress-testen: snelle en herhaalde positiewijzigingen.

Tools voor QA:

  • Android Studio (voor debugging, logweergave, gebruik van Profiler).
  • adb-commando's om rotaties te simuleren.
  • Verschillende emulators en echte apparaten met verschillende resoluties en Android-versies.