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.