Sobes.tech
Middle
99
questionbank

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

Ответ от нейросети

sobes.tech 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);
            }
        }
    }
    
  • Обработка Configuration Changes: Объявление android:configChanges в AndroidManifest.xml для тех случаев, когда пересоздание Activity не требуется (менее распространенный сценарий для обработки смены ориентации, но используется для других изменений конфигурации).
  • Жизненный цикл ViewModel: ViewModel сохраняет свое состояние при смене конфигурации и не уничтожается вместе с Activity.
  • Фрагменты: Правильное управление жизненным циклом Фрагментов.

Тестирование специфики смены позиций:

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

Инструменты для QA:

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