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

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

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

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

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

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

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

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

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

  • 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 з iOS 16 показує користувачам рейтинг потребування батареї за програмами. Android з версії 12 активно сигналізує про фонові процеси через Battery Usage alerts. Програма може працювати коректно технічно, але при цьому бути в списку «прожорливих» — і користувачі її видалять.

Головні споживачі: що показує Battery Historian

Battery Historian — інструмент Google для аналізу bugreport з Android-пристрою. Показує часову шкалу: wakelock-и, network activity, GPS фіксації, CPU wakeup. Типова картина програми з проблемним потреблям: wakelock кожні 15 хвилин на 2-3 секунди, періодичні network запити, GPS у фоні з високою точністю.

Wakelock-и. PowerManager.WakeLock.acquire() без таймауту або без гарантованого release() — пристрій не уходит у deep sleep. Один незакритий PARTIAL_WAKE_LOCK тримає процесор активним всю ніч. Використовуємо WakefulBroadcastReceiver або WorkManager, які керують wakelock автоматично.

WorkManager та невірні інтервали. Періодична задача з інтервалом 15 хвилин (мінімально допустимий) на пристрої з агресивною Battery Optimization може працювати рідше. Але якщо в задачі є мережевий запит + запис у базу + GPS — 15 хвилин занадто часто. JobScheduler batching: групуємо задачі, використовуємо setRequiredNetworkType(NetworkType.CONNECTED) щоб не будити радіо без сети.

GPS: головний убивця батареї

LocationManager з LocationRequest.PRIORITY_HIGH_ACCURACY (Fused Location Provider) включає GPS-приймач та тримає його активним. 1-2% батареї на годину при безперервному GPS — це реальні цифри на сучасних пристроях.

Правильна стратегія за типами програм:

  • Навігація у фоні: PRIORITY_HIGH_ACCURACY лише при активній навігації, переключення на PRIORITY_BALANCED_POWER_ACCURACY при фоновому трекінгу маршруту
  • Геофенсинг: GeofencingClient замість постійного GPS — спрацьовує лише при вході/виході з зони, потребування мінімальне
  • «Знайти рядом»: розовий getCurrentLocation() замість постійних оновлень

На iOS: CLLocationManager з desiredAccuracy = kCLLocationAccuracyBest у фоні — серйозна проблема. significantLocationChangeMonitoring потребує на порядок менше та достатня для більшості сценаріїв фонової геолокації. allowsBackgroundLocationUpdates = true вимагає явного обґрунтування — без нього iOS агресивно ограничує оновлення.

Мережеві запити та радіо

Радіомодуль (Wi-Fi, LTE) при активації тратить додаткову енергію на підйом з'єднання, навіть якщо передається 1 байт. Закономірність: краще один крупний запит раз у 5 хвилин, ніж 20 маленьких запитів кожні 15 секунд. Batching запитів через WorkManager з setRequiredNetworkType гарантує, що запити не розбудять радіо без сети.

HTTP Keep-Alive та HTTP/2 multiplexing скорочують кількість TCP handshake — це не тільки латентність, але й батарея.

Push-уведомлення через FCM/APNs — правильний спосіб сигналізувати про нові дані замість long polling або short polling. Server-Sent Events та WebSocket прийнятні коли потрібна реалтайм-комунікація, але їх потрібно закривати при уходе у фон.

iOS: Background App Refresh та BGTaskScheduler

BGAppRefreshTask та BGProcessingTask — сучасний API для фонових задач на iOS. Система сама вирішує, коли їх запустити, спираючись на паттерни використання пристрою (ночі, на зарядці). Спроби обійти це через background audio trick або VoIP push для не-VoIP програм — порушення App Store Guidelines.

URLSession.shared.configuration.waitsForConnectivity = true — мережеві запити не піднімають радіо одразу, чекають готового з'єднання.

Практичний кейс

Програма для трекінгу фітнес-активностей. Користувачі скаржилися на 8-10% батареї на годину у фоні. Battery Historian показав: CoreLocationManager з PRIORITY_HIGH_ACCURACY працював безперервно, плюс PeriodicWorkRequest кожні 15 хвилин робив 4 мережеві запити. Переключення на PRIORITY_BALANCED_POWER_ACCURACY для фонового трекінгу + об'єднання мережевих запитів в один + збільшення інтервалу до 30 хвилин дало 1.5-2% на годину — в 4-5 разів менше, при збереженні функціональності.

Інструменти діагностики

Android: Battery Historian, Android Studio Energy Profiler, adb shell dumpsys batterystats iOS: Xcode Instruments → Energy Log, MetricKit MXCPUMetric, Xcode Organizer → Battery Usage Cross-platform: Firebase Performance Monitoring не трекає батарею, але трекає кількість мережевих запитів та їхній розмір — непрямий індикатор

Термін оптимізації: одна-два тижні: діагностика, пріоритизація, виправлення.