Sobes.tech
Middle

Kāda ir pozīciju maiņas specifika Android platformā?

sobes.tech AI

Atbilde no AI

Mainīt pozīcijas (piemēram, ekrāna pagriešana vai citas konfigurācijas izmaiņas) Android gadījumā izraisa pašreizējās aktivitātes iznīcināšanu un jaunas izveidi.

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.
  • Fragmenti: 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.