9. Тестирование энергопотребления и нагрузки на батарею

Дружище, тестирование батареи — это не просто «ой, быстро садится»! В мобильных приложениях можно всё сломать так, что телефон будет жрать заряд, как голодный студент доширак. Давай разберём, почему это важно, что тестить, и какие инструменты помогут найти прожорливые баги.

⚡ Зачем тестировать энергопотребление?

📉 Плохая оптимизация — плохие отзывы. Если приложение высаживает батарею за пару часов, его удаляют.
🔥 Фоновые процессы могут тайно кушать заряд. Чаты, трекеры, пуши — всё это может незаметно жрать проц и сеть.
📊 Приложение может перегружать CPU, GPU и сеть. Игры, анимации, кривые API-запросы – и вот уже телефон кипит.
📱 Старые устройства страдают больше. На флагманах лагов нет, а на бюджетках ад.

🔋 Что тестируем?

1 Базовые сценарии проверки батареи

✅ Запустить приложение и понаблюдать за расходом заряда.
✅ Оставить в фоне и посмотреть, жрёт ли батарею.
✅ Использовать активные функции (видео, GPS, анимации).
✅ Проверить, как ведёт себя приложение в условиях низкого заряда.

2 Ключевые метрики энергопотребления

🔌 CPU Usage – сколько жрёт процессор?
🖥 GPU Load – если есть анимации и графика, грузит ли GPU?
📶 Сетевые запросы – не спамит ли API?
🔋 Wakelocks – не мешает ли приложуха телефону заснуть?
📡 Сенсоры (GPS, акселерометр, Bluetooth, Wi-Fi) – отключаются ли, когда не нужны?

🛠 Инструменты для тестирования батареи

📌 Android

1) ADB Battery Stats (стандартный инструмент Android)

adb shell dumpsys batterystats adb shell dumpsys batterystats | grep "Uid u0a202"

📌 Показывает, какие процессы жрут заряд и какие компоненты активны (CPU, Wi-Fi, GPS, экран, сенсоры).

2) Battery Historian

  • Визуализирует отчёты из ADB.
  • Показывает графики энергопотребления.
  • Можно увидеть, какие сервисы держат wakelock и мешают спать телефону.

Запуск:

python3 historian.py -c batterystats.txt

📌 Пример: приложение не отпускает Wi-Fi после завершения работы – фикс в коде:

val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager wifiManager.disconnect() // Освобождаем Wi-Fi, когда не нужен

3) Android Studio Profiler

  • Отображает CPU, RAM, батарею, сетевые вызовы в реальном времени.
  • Можно посмотреть нагрузку при разных сценариях (скролл, видео, анимации).

📌 iOS

  • Включаем через Instruments → Energy Log.
  • Показывает, где процессор уходит в космос, какие фоновые задачи жрут заряд.

📌 Пример: приложение использует GPS в фоне (нужно отключать, когда не нужно)

locationManager.stopUpdatingLocation()

2) instruments → Time Profiler

  • Анализирует, какой код нагружает процессор.
  • Полезно для оптимизации CPU-heavy задач (анимации, фоновые вычисления).

📡 Как тестировать энергопотребление?

1 Ручное тестирование (базовые проверки)

✅ Запустить приложение и поиграться с ним 10-15 минут.
✅ Оставить в фоне и посмотреть, разряжается ли батарея.
✅ Включить режим энергосбережения и проверить, как ведёт себя приложение.

2 Автоматизация замеров батареи (Android)

adb shell dumpsys batterystats > battery_report.txt

📌 Анализируем battery_report.txt, ищем жрущие процессы и сервисы.

3 Анализ Wakelocks (Android)

adb shell dumpsys power | grep "WakeLocks"

📌 Показывает, какие процессы не дают телефону уснуть.

4 Тестирование нагрузки в экстремальных условиях

🔥 Высокая температура – как ведёт себя телефон, если он нагревается?
📶 Плохая сеть – приложение продолжает спамить API или ждёт нормального соединения?
📡 Выключение GPS, Wi-Fi, Bluetooth – корректно ли реагирует приложение?

🚀 Оптимизация энергопотребления

📌 Избавляемся от ненужных фоновых сервисов

jobScheduler.cancelAll() // Останавливаем ненужные задачи

📌 Ограничиваем Wakelocks

wakeLock.release() // Даем телефону заснуть

📌 Меньше обновлений в фоне

workManager.enqueueUniqueWork("background_sync", ExistingWorkPolicy.KEEP, workRequest)

🔥 Вместо бесконечных фоновых сервисов – WorkManager (Android) или Background Tasks (iOS).

📌 Итоги

🔋 Плохая оптимизация = плохие отзывы и удаление приложения.
📊 Важно следить за CPU, GPU, сетью и Wakelocks.
🛠 Лучшие инструменты: ADB Battery Stats, Battery Historian, Xcode Energy Log.
🚀 Тестируем вручную и автоматизируем замеры.

Начать дискуссию