Sobes.tech
Middle

Milline on positsioonide muutmise spetsiifika Androidi platvormil?

sobes.tech AI

Vastus AI-lt

Posicionālo izmaiņu (piemēram, ekrāna pagriešanas vai citu konfigurācijas izmaiņu) gadījumā Android notiek pašreizējās aktivitātes iznīcināšana un jaunas izveide.

Kas notiek:

  • Vecās aktivitātes dzīves cikli tiek izsaukti: onPause(), onStop(), onDestroy().
  • Vecā aktivitāte tiek izņemta no atmiņas.
  • Tiek izveidota jauna aktivitāte.
  • Tiek izsaukti jaunas aktivitātes dzīves cikli: onCreate(), onStart(), onResume().

Specifika QA:

  • Datu zudums: Nesaglabāti dati ievades laukos, atlasītie saraksta elementi utt. var tikt zaudēti, ja to saglabāšana nav īstenota.
  • UI stāvoklis: Elementu redzamība, ritināšanas pozīcijas, atlasītās cilnes un cits UI stāvoklis var tikt atiestatīts uz noklusējuma stāvokli.
  • Fona operācijas: Sāktas fonu uzdevumi (piemēram, datu ielāde) var tikt pārtraukti vai nepareizi pabeigti.
  • Veiktspēja: Daudzkārtējas konfigurācijas izmaiņas var novest pie lietotnes darbības palēnināšanās, jo aktivitāte tiek pastāvīgi pārveidota.
  • Atmiņas noplūde: Nepareiza resursu izmantošana (piemēram, klausītāji, kas nav atvienoti onDestroy()) var novest pie atmiņas noplūdēm.

Kā to risina izstrādātāji (un ko QA jā pārbauda galvenokārt):

  • Stāvokļa saglabāšana: Izmantojot onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Piemērs datu saglabāšanai `onSaveInstanceState()`
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Piemērs datu atjaunošanai `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);
            }
        }
    }
    
  • Konfigurācijas izmaiņu apstrāde: android:configChanges deklarēšana AndroidManifest.xml, ja nav nepieciešama aktivitātes pārveidošana (mazāk izplatīts scenārijs, bet izmanto citām konfigurācijas izmaiņām).
  • ViewModel dzīves cikla pārvaldība: ViewModel saglabā savu stāvokli konfigurācijas izmaiņu laikā un netiek iznīcināts kopā ar aktivitāti.
  • Fрагments: Pareiza dzīves cikla pārvaldība fragmentiem.

Specifiskās testēšanas aktivitātes pozīcijas maiņai:

  • Pagriežot ekrānu dažādās ierīcēs un emulātoros.
  • Saglabājot un atjaunojot datus pēc pozīcijas maiņas.
  • Pārbaudot UI stāvokli (redzamība, teksts, ritināšana, atlasītie elementi).
  • Pārbaudot fonu uzdevumu pārtraukšanu un turpināšanu.
  • Pārbaudot atmiņas noplūdes (Android Profiler izmantošana).
  • Stresa testēšana: daudzkārtējas ātras pozīcijas maiņas.

Rīki QA:

  • Android Studio (lai debug, logu pārskatīšana, Profiler izmantošana).
  • adb komandas ekrāna pagriešanas simulācijai.
  • Dažādas emulācijas un reālas ierīces ar dažādiem izšķirtspējām un Android versijām.