Повећана потрошња батерије — једна од најчешћих жалби корисника мобилних апликација. Апликација почиње да троши аномално много енергије, изазивајући брзо пражњење уређаја чак и у позадинском режиму. Према Google I/O 2023, до 30% апликација у Google Play-у има проблеме са потрошњом енергије, што директно утиче на задржавање корисника. У овом чланку ћемо размотрити узроке, дијагностику и методе оптимизације.
Главно
Повећана потрошња батерије — стање у којем мобилна апликација троши значајно више енергије него што се очекује у типичном сценарију коришћења. Корисник примећује да се уређај празни 20-30% брже него обично након инсталације или ажурирања апликације.
Савремени мобилни оперативни системи — Android и iOS — имају уграђене механизме контроле потрошње енергије. Android користи Battery Optimization, а iOS — позадинске Background Modes. Међутим, неправилно коришћење API-ја може заобићи ове механизме.
Према истраживању Purdue University (2021), око 60% апликација троши енергију на позадинске задатке без очигледне потребе. Ово је посебно карактеристично за апликације са рекламама, аналитиком и сталним мрежним везама.
Потрошња енергије се мери у mA·h (милиампер-сатима). Android пружа податке путем BatteryManager API-ја, који прати потрошњу сваке компоненте: CPU, радио-модул, GPS, дисплеј и сензори.
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val chargeCounter = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
val capacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
// chargeCounter / capacity * 100 = тренутни проценат напуњености
BatteryManager API омогућава добијање тренутног процента напуњености и капацитета батерије, али не пружа детаље по апликацијама — за то су потребни системски алати.
WakeLock — најопаснији механизам за батерију. Ако апликација држи WakeLock без ослобађања, уређај не прелази у режим спавања. Сваки сат држања WakeLock-а троши око 50-80 mA·h.
Мрежни захтеви без груписања — други најчешћи узрок. Сваки пут када апликација успостави мрежну везу, радио-модул прелази из режима уштеде енергије у активни режим. Чести кратки захтеви са интервалом мањим од 5 минута држе радио-модул стално у активном стању.
Одређивање GPS локације са високом прецизношћу (GPS_PROVIDER) троши 10-15 пута више енергије од приближног одређивања (NETWORK_PROVIDER). Константно ажурирање локације у позадини је једна од главних жалби корисника.
Према Android Developers Blog, просечна апликација троши око 15% укупне потрошње батерије уређаја. Прекорачење овог нивоа захтева обавезну ревизију потрошње енергије.
Battery Historian — званични Google алат за анализу потрошње енергије. Прима дамп BatteryStats-а из ADB-а и визуализује потрошњу по компонентама: CPU, Мрежа, GPS, WakeLock и дисплеј.
Да бисте креирали дамп, извршите команду: adb shell dumpsys batterystats. Након прикупљања података током 2-3 сата нормалног коришћења, можете учитати извештај у Battery Historian за анализу.
Android Energy Profiler у Android Studio-у прати потрошњу енергије у реалном времену. Приказује потрошњу CPU-а, мреже, GPS-а и дисплеја за сваку операцију апликације.
# Ресетуј статистику батерије пре теста
adb shell dumpsys batterystats --reset
# Користи апликацију 2-3 сата
# Извези дамп за Battery Historian
adb shell dumpsys batterystats > batterystats_dump.txt
За iOS се користи Energy Log путем Xcode-а — Instruments. Прикупља податке о потрошњи енергије разврстане по модулима: CPU, Мрежа, GPU, Display, Локација. Време читања: 15-30 минута за анализу једне сесије.
На физичком iOS уређају, статистика потрошње енергије се такође приказује у Подешавања > Батерија. Ако је апликација у топ 10 по потрошњи — то је сигнал за оптимизацију.
WorkManager — стандардни API за позадинске задатке који уважава стање батерије, мреже и Doze режим. Гарантује извршење задатка у оптималним условима, а не одмах, што штеди до 40% енергије на позадинским операцијама.
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(
Constraints.Builder()
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.setRequiresNetworkType(NetworkType.CONNECTED)
.build()
)
.build()
WorkManager.getInstance(this).enqueue(workRequest)
Груписање захтева — обједињавање више мрежних операција у једну комуникациону сесију. Уместо 10 одвојених захтева, апликација извршава један групни захтев, што смањује време активности радио-модула са 30 секунди на 2-3 секунде.
FusedLocationProviderClient од Google Play Services бира оптимални извор локације у зависности од потребне прецизности. За позадинске задатке користите приоритет PRIORITY_BALANCED_POWER_ACCURACY — ово даје прецизност до 100 метара уз минималну потрошњу батерије.
У iOS-у користите Significant Location Change уместо Continuous Location. Ово омогућава примање ажурирања само при значајном померању (више од 500 метара), а не сваких неколико секунди.
Android Battery Historian — Google-ов веб алат за визуализацију података BatteryStats-а. Подржава увоз дампова, обојено означавање компоненти и поређење сесија. Главне метрике: време држања WakeLock-а, активност радио-модула, GPS сесије.
Xcode Energy Organizer прикупља податке о потрошњи енергије од корисника продукције путем TestFlight-а и App Store-а. Добијате извештај о просечној потрошњи на различитим уређајима и верзијама iOS-а. Ово омогућава праћење регресија након ажурирања.
PerfDog (Tencent) — вишеплатформски алат за тестирање перформанси, који укључује мерења потрошње енергије. Подржава iOS и Android, омогућава снимање индикатора са фреквенцијом од 1-10 кадрова у секунди.
| Алат | Платформа | Метрике |
|---|---|---|
| Battery Historian | Android | WakeLock, Мрежа, GPS, CPU, Display |
| Energy Profiler | Android Studio | CPU, Мрежа, GPS, Radio у реалном времену |
| Energy Log | iOS (Xcode) | CPU, Мрежа, GPU, Display, Локација |
| PerfDog | iOS + Android | Енергија, FPS, CPU, Меморија (све заједно) |
Према Apple WWDC 2023, коришћење Energy Organiser-а омогућава смањење просечне потрошње енергије апликација за 15-25% кроз идентификацију и отклањање регресија пре објављивања ажурирања у App Store-у.
Често постављана питања
Друштвене мреже и месенџери (Facebook, Instagram, WhatsApp, Telegram) традиционално предњаче у потрошњи енергије. Оне стално синхронизују податке, ажурирају феед, примају push обавештења и користе GPS. На другом месту — игре са 3D графиком које истовремено оптерећују GPU и CPU, трошећи до 400-600 mA·h за сат активне игре.
Да, директно. Екран — најенергетски захтевнија компонента паметног телефона. Повећање фреквенције са 60 Hz на 120 Hz повећава потрошњу енергије дисплеја за 30-50%. Међутим, савремени дисплеји са LTPO технологијом динамички мењају фреквенцију од 1 до 120 Hz у зависности од садржаја, што смањује утицај на батерију.
GPS са високом прецизношћу троши око 200-300 mA·h на сат непрекидног рада. Поређења ради, одређивање локације путем Wi-Fi-ја и мобилних базних станица (NETWORK_PROVIDER) троши само 20-40 mA·h за исти период. Користите Geofencing API за укључивање GPS-а само при уласку у одређену област.
Не вреди. Савремени оперативни системи (Android и iOS) сами оптимизују позадинске процесе. Принудно затварање апликације и поновно покретање троши више енергије него да је апликација остала у позадини. Изузетак — апликације које експлицитно изазивају проблеме (утврђује се путем статистике батерије у подешавањима).
Отворите Подешавања > Батерија > Коришћење батерије. Систем ће приказати листу апликација са процентом потрошње. За детаљну анализу користите ADB: adb shell dumpsys batterystats и учитајте дамп у Battery Historian. Ово ће показати не само укупну потрошњу, већ и разлагање по компонентама (WakeLock, Мрежа, GPS).
Завршни закључци
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође