Sobes.tech
Middle

Каква е спецификата на смяната на позиции на платформата Android?

sobes.tech AI

Отговор от AI

При смяна на позиции (например, завъртане на екрана или други конфигурационни промени) в Android текущата Activity се унищожава и се създава нова.

Какво се случва:

  • Извикват се жизнените цикли на старата Activity: onPause(), onStop(), onDestroy().
  • Старият Activity се премахва от паметта.
  • Създава се нов Activity.
  • Извикват се жизнените цикли на новата Activity: onCreate(), onStart(), onResume().

Специфики за QA:

  • Загуба на данни: Незаписаните данни в полетата за въвеждане, избраните елементи от списъка и др. могат да бъдат загубени, ако не е реализирана тяхната запазване.
  • Състояние на UI: Видимостта на елементите, позицията на скрол, избраните раздели и други състояния на UI могат да се нулират до стойност по подразбиране.
  • Фонови операции: Започнатите фонови задачи (например зареждане на данни) могат да бъдат прекъснати или неправилно завършени.
  • Производителност: Многократните промени на конфигурацията могат да забавят приложението поради постоянното създаване на нова Activity.
  • Утечки на памет: Неправилната работа с ресурсите (например, слушатели, които не са отписани в 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 за случаите, когато не е необходимо създаване на нова Activity (по-редки случаи, използвани за други промени в конфигурацията).
  • Животен цикъл на ViewModel: ViewModel запазва състоянието си при промяна на конфигурацията и не се унищожава заедно с Activity.
  • Фрагменти: Правилно управление на жизнения цикъл на Фрагментите.

Тестване на смяна на позициите:

  • Симулиране на завъртане на екрана на различни устройства и емулатори.
  • Тестове за запазване и възстановяване на данни след смяна на позицията.
  • Проверка на състоянието на UI (видимост, текст, скрол, избрани елементи).
  • Тестове за прекъсване/продължаване на фонови задачи.
  • Проверка за утечки на памет (използване на Android Profiler).
  • Стрес тестове: многократни бързи смени на позицията.

Инструменти за QA:

  • Android Studio (за дебъгване, преглед на логове, използване на Profiler).
  • adb команди за симулация на завъртане.
  • Различни емулатори и реални устройства с различни резолюции и версии на Android.