Тестування споживання батареї мобільним додатком

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Тестування споживання батареї мобільним додатком
Середній
~2-3 дні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Тестування потребування батареї мобільним додатком

Додаток, який розраджує телефон за полдня, отримує однозвіздкові відгуки та видаляється. iOS показує його у розділі «Висока енергоспоживання» у Налаштуваннях. Android з API 26+ перекладає його у Doze-режим та починає ограничувати фонові процеси. Проблема майже ніколи не в одній великій утечці — зазвичай це кілька дрібних: GPS не вимикається у фоні, WebSocket пінгує кожні 5 секунд, фоновий Worker спрацьовує занадто часто.

iOS: Xcode Energy Organizer та Instruments

Instruments → Energy Log — базовий інструмент. Показує активність CPU, GPU, мережі, GPS та екрана протягом часу. Кожна «вспышка» активності — витрата енергії.

Energy Impact у Xcode Debug Navigator: Low / High / Very High — груба оцінка у реальному часі. Для точних вимірювань — XCTMetric:

func testBackgroundSyncEnergyImpact() throws {
  let metrics: [XCTMetric] = [XCTCPUMetric(), XCTMemoryMetric(), XCTClockMetric()]
  let options = XCTMeasureOptions()
  options.iterationCount = 5

  measure(metrics: metrics, options: options) {
    // імітуємо фонову синхронізацію
    let expectation = self.expectation(description: "sync")
    BackgroundSyncService.shared.sync {
      expectation.fulfill()
    }
    wait(for: [expectation], timeout: 30)
  }
}

XCTCPUMetric + XCTClockMetric дають дані про навантаження CPU та реальний час виконання. Якщо cpuTime зростає нелінійно при збільшенні кількості ітерацій — де-то накопичується стан.

Типові проблеми на iOS

CLLocationManager без pausesLocationUpdatesAutomatically = true та без явного stopUpdatingLocation() при уходу у фон продовжує працювати та сажає батарею. Правильна стратегія для більшості додатків — requestWhenInUseAuthorization() замість requestAlwaysAuthorization(), та перемикання на startMonitoringSignificantLocationChanges() коли точність не критична.

Timer з Timer.scheduledTimer(withTimeInterval: 1.0, ...) на main run loop, забутий при уходу у фон — ще одна класика. Перевіряємо: всі Timer інвалідуються у applicationDidEnterBackground або у deinit view controller.

Android: Battery Historian та Perfetto

Battery Historian — веб-інструмент від Google для аналізу bug report:

adb bugreport bugreport.zip
# Відкриваємо на https://bathist.ef.lc/ або локально через Docker
docker run -d -p 9999:9999 gcr.io/android-battery-historian/stable:3.1 --port 9999

На таймлайні бачимо: wakelock'и (хто не дає процесору засипати), синхронізації, GPS-активність, мережеві запити. WakeLock з іменем myapp:background_sync утримуваний 40 хвилин зі 60 — червоний прапор.

Перевірка wakelocks через adb:

adb shell dumpsys power | grep -A 3 "Wake Locks:"
adb shell dumpsys battery | grep level

WorkManager та енергоефективність

WorkManager — правильний спосіб фонових завдань на Android. Неправильна конфігурація вбиває батарею:

// Погано: мінімальний інтервал 15 хвилин за замовчуванням
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(15, TimeUnit.MINUTES).build()

// Краще: привязуємо до мережевого підключення, батарея не розряджена
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(1, TimeUnit.HOURS)
  .setConstraints(
    Constraints.Builder()
      .setRequiredNetworkType(NetworkType.CONNECTED)
      .setRequiresBatteryNotLow(true)
      .build()
  )
  .build()

setRequiresBatteryNotLow(true) — Worker не запуститься, якщо заряд нижче ~20%. setRequiredNetworkType(NetworkType.CONNECTED) — не буде спроб, коли немає мережі.

Perfetto — більш детальний трейсинг для Android. Показує активність на рівні трек CPU, мережі, I/O. Корисний коли Battery Historian показує проблему, але не локалізує її до конкретного кода.

Мережеві операції та батарея

Кожний підйом радіо-модуля (WiFi або LTE) — пік спожиття. Радіо залишається активним 10–30 секунд після останнього запиту (tail energy). Замість 10 запитів по 1 об'єкту краще 1 запит на 10 об'єктів — один підйом замість десяти.

Для WebSocket: пінги кожні 5 секунд у фоні — це 12 підйомів радіо на хвилину. Розумний інтервал — 30–60 секунд, з урахуванням NAT-таймаутів.

Що включено

  • Профілювання енергопотреблення на iOS (Instruments Energy Log, XCTMetric)
  • Аналіз Battery Historian для Android (wakelocks, синхронізації, GPS)
  • Перевірка фонових процесів: WorkManager, BGTaskScheduler, push-сесії
  • Аналіз мережевих паттернів на надлишкові запити
  • Звіт з конкретними находками та рекомендаціями по коду

Строки

2–3 дні — аналіз існуючого додатку, профілювання на реальних пристроях, звіт. Вартість розраховується індивідуально.