Что может вызвать аварийное завершение (краш) мобильного приложения?

«Что может вызвать аварийное завершение (краш) мобильного приложения?» — вопрос из категории Мобильное тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Краш мобильного приложения — это его неожиданное и полное прекращение работы. Основные причины:

  1. Необработанные исключения и ошибки времени выполнения:

    • NullPointerException (обращение к null-объекту).
    • OutOfMemoryError (исчерпание доступной памяти).
    • ArrayIndexOutOfBoundsException (выход за границы массива).
      // Пример потенциального краша на Kotlin (Android)
      val text: String? = null
      text.length // Вызовет NullPointerException
  2. Проблемы с основным потоком (UI Thread): Долгие операции (сеть, БД), выполняемые в UI-потоке, приводят к ANR (Application Not Responding), после которого система завершает приложение.

  3. Системные события и ограничения:

    • Входящий звонок или SMS (на некоторых OS).
    • Низкий заряд батареи в режиме энергосбережения.
    • Принудительная остановка со стороны ОС из-за нехватки памяти для других задач.
  4. Конфликты и ошибки в нативных библиотеках или зависимостях.

  5. Проблемы с разрешениями: Запрос к защищённым ресурсам (камера, геолокация) без соответствующего разрешения или его обработки.

Меры предотвращения: использование try-catch, обработка жизненного цикла компонентов, вынос тяжёлых задач в фоновые потоки/сервисы, тщательное тестирование на разных устройствах и в разных условиях (например, при потере сети).