Sobes.tech
Middle

Ի՞նչ է Android պլատֆորմում դիրքերի փոփոխության առանձնահատկությունը։

sobes.tech AI

Պատասխան AI-ից

Երբ փոխվում է դիրքը (օրինակ՝ էկրանին պտտում կամ այլ կոնֆիգուրացիոն փոփոխություններ) Android-ում, ընթացիկ Activity-ն ոչնչացվում է և ստեղծվում է նոր։

Ինչ է տեղի ունենում:

  • Հին Activity-ի կյանքի ցիկլերը կանչվում են՝ onPause(), onStop(), onDestroy():
  • Հին Activity-ն հեռացվում է հիշողությունից:
  • Նոր Activity-ն ստեղծվում է:
  • Նոր Activity-ի կյանքի ցիկլերը կանչվում են՝ onCreate(), onStart(), onResume():

QA-ի համար առանձնահատկություններ:

  • Տվյալների կորուստ: Անպահպանված տվյալները՝ մուտքային դաշտերում, ընտրված տարրեր ցանկում և այլն, կարող են կորել, եթե դրանց պահպանությունը չի իրականացվել:
  • UI-ի վիճակը: Էլեմենտների տեսանելիությունը, սքրոլի դիրքը, ընտրված տաբները և այլ UI-ի վիճակները կարող են վերականգնվել նախնական վիճակին:
  • Ֆոնային գործողություններ: Ֆոնային առաջադրանքները (օրինակ՝ տվյալների բեռնումը) կարող են ընդհատվել կամ սխալ ավարտվել:
  • Արդյունավետություն: Կրկնվող կոնֆիգուրացիոն փոփոխությունները կարող են դանդաղեցնել հավելվածը՝ Activity-ի մշտական վերականգնման պատճառով:
  • Հիշողության արտահոսք: Անպատշաճ ռեսուրսների աշխատանքի պատճառով (օրինակ՝ Listener-ներ, որոնք չեն անջատվել onDestroy()-ում) կարող է առաջանալ հիշողության արտահոսք:

Ինչպես են դա կարգավորում ծրագրավորողները (և ինչ պետք է առաջին հերթին ստուգի QA-ն):

  • Կարգավիճակի պահպանում: onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC) օգտագործելով:
// Տվյալների պահպանում `onSaveInstanceState()`-ում
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("saved_text", myEditText.getText().toString());
}
// Տվյալների վերականգնում `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);
        }
    }
}
  • Կոնֆիգուրացիայի փոփոխությունների կառավարում: android:configChanges-ը հայտարարելը AndroidManifest.xml-ում այն դեպքերում, երբ վերականգնումը չի պահանջվում:
  • ViewModel-ի կյանքի ցիկլը: ViewModel-ը պահպանում է իր վիճակը կոնֆիգուրացիայի փոփոխության ժամանակ և չի ոչնչացվում միասին Activity-ի:
  • Fragment-ների կառավարում: Դուրս է գալիս ճիշտ կյանքի ցիկլի կառավարում:

Փորձարկումներ դիրքի փոփոխության համար:

  • Էկրանին պտտելու սիմուլյացիա տարբեր սարքերում և էմուլատորներում:
  • Տվյալների պահպանման և վերականգնման փորձարկում դիրքի փոփոխությունից հետո:
  • UI-ի վիճակի ստուգում (տեսանելիություն, տեքստ, սքրոլ, ընտրված տարրեր):
  • Ֆոնային առաջադրանքների ընդհատում/շարունակություն:
  • Հիշողության արտահոսքի ստուգում (Android Profiler-ով):
  • Սթրեսային փորձարկում՝ արագ բազմակի փոփոխություններ:

QA-ի գործիքներ:

  • Android Studio (դեբագ, լոգների դիտում, Profiler-ի օգտագործում):
  • adb հրամաններ՝ պտտման սիմուլյացիայի համար:
  • Տարբեր էմուլատորներ և իրական սարքեր՝ տարբեր լուծումներով և Android տարբերակներով։