Zvýšená spotřeba baterie — jedna z nejčastějších stížností uživatelů mobilních aplikací. Aplikace začne spotřebovávat abnormálně mnoho energie, což způsobuje rychlé vybíjení zařízení i v režimu na pozadí. Podle Google I/O 2023 má až 30% aplikací v Google Play problémy se spotřebou energie, což přímo ovlivňuje udržení uživatelů. V tomto článku rozebereme příčiny, diagnostiku a metody optimalizace.
Hlavní body
Zvýšená spotřeba baterie — stav, kdy mobilní aplikace spotřebovává výrazně více energie, než se očekává v typickém scénáři použití. Uživatel si všimne, že se zařízení vybíjí o 20-30% rychleji než obvykle po instalaci nebo aktualizaci aplikace.
Moderní mobilní operační systémy — Android a iOS — mají vestavěné mechanismy pro kontrolu spotřeby energie. Android používá Battery Optimization a iOS používá Background Modes. Nesprávné použití API však může tyto mechanismy obejít.
Podle výzkumu Purdue University (2021) přibližně 60% aplikací spotřebovává energii na úlohy na pozadí bez zjevné potřeby. To je charakteristické zejména pro aplikace s reklamami, analytikou a trvalým síťovým připojením.
Spotřeba energie se měří v mA·h (miliampérhodinách). Android poskytuje data prostřednictvím API BatteryManager, které sleduje spotřebu každé součásti: CPU, rádiový modul, GPS, displej a senzory.
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 = aktuální procento nabití
API BatteryManager umožňuje získat aktuální procento nabití a kapacitu baterie, ale neposkytuje podrobnosti podle aplikací — k tomu jsou potřeba systémové nástroje.
WakeLock — nejnebezpečnější mechanismus pro baterii. Pokud aplikace drží WakeLock bez uvolnění, zařízení nepřechází do režimu spánku. Každá hodina držení WakeLock spotřebuje přibližně 50-80 mA·h.
Požadavky na síť bez seskupování — druhá nejčastější příčina. Pokaždé, když aplikace naváže síťové připojení, rádiový modul přechází z režimu úspory energie do aktivního režimu. Časté krátké požadavky v intervalu kratším než 5 minut udržují rádiový modul neustále v aktivním stavu.
Určování GPS polohy s vysokou přesností (GPS_PROVIDER) spotřebuje 10-15krát více energie než přibližné určování (NETWORK_PROVIDER). Neustálá aktualizace polohy na pozadí je jednou z hlavních stížností uživatelů.
Podle Android Developers Blog průměrná aplikace spotřebuje přibližně 15% celkové spotřeby baterie zařízení. Překročení této úrovně vyžaduje povinný audit spotřeby energie.
Battery Historian — oficiální nástroj Google pro analýzu spotřeby energie. Přijímá dump BatteryStats z ADB a vizualizuje spotřebu podle součástí: CPU, Síť, GPS, WakeLock a displej.
Pro vytvoření dumpu spusťte příkaz: adb shell dumpsys batterystats. Po shromáždění dat po dobu 2-3 hodin normálního používání můžete nahrát zprávu do Battery Historian k analýze.
Android Energy Profiler v Android Studio sleduje spotřebu energie v reálném čase. Zobrazuje spotřebu CPU, Sítě, GPS a displeje pro každou operaci aplikace.
# Resetujte statistiky baterie před testem
adb shell dumpsys batterystats --reset
# Používejte aplikaci 2-3 hodiny
# Exportujte dump pro Battery Historian
adb shell dumpsys batterystats > batterystats_dump.txt
Pro iOS se používá Energy Log přes Xcode — Instruments. Shromažďuje údaje o spotřebě energie rozložené podle modulů: CPU, Síť, GPU, Displej, Poloha. Doba čtení: 15-30 minut na analýzu jedné relace.
Na fyzickém zařízení iOS se statistiky spotřeby energie zobrazují také v Nastavení > Baterie. Pokud je aplikace v top 10 ve spotřebě — je to signál k optimalizaci.
WorkManager — standardní API pro úlohy na pozadí, které bere v úvahu stav baterie, sítě a režim Doze. Zaručuje provedení úlohy za optimálních podmínek, ne okamžitě, což šetří až 40% energie na operacích na pozadí.
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(
Constraints.Builder()
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.setRequiresNetworkType(NetworkType.CONNECTED)
.build()
)
.build()
WorkManager.getInstance(this).enqueue(workRequest)
Seskupování požadavků — spojení několika síťových operací do jedné komunikační relace. Místo 10 samostatných požadavků aplikace provede jeden hromadný požadavek, což snižuje dobu aktivity rádiového modulu z 30 sekund na 2-3 sekundy.
FusedLocationProviderClient od Google Play Services vybírá optimální zdroj polohy v závislosti na požadované přesnosti. Pro úlohy na pozadí použijte prioritu PRIORITY_BALANCED_POWER_ACCURACY — poskytuje přesnost až 100 metrů při minimální spotřebě baterie.
V iOS použijte Significant Location Change místo Continuous Location. To umožňuje přijímat aktualizace pouze při významném pohybu (více než 500 metrů), ne každých několik sekund.
Android Battery Historian — webový nástroj Google pro vizualizaci dat BatteryStats. Podporuje import dumpů, barevné označování součástí a porovnávání relací. Hlavní metriky: doba držení WakeLock, aktivita rádiového modulu, GPS relace.
Xcode Energy Organizer shromažďuje údaje o spotřebě energie od produkčních uživatelů prostřednictvím TestFlight a App Store. Obdržíte zprávu o průměrné spotřebě na různých zařízeních a verzích iOS. To umožňuje sledovat regrese po aktualizacích.
PerfDog (Tencent) — multiplatformní nástroj pro testování výkonu, včetně měření spotřeby energie. Podporuje iOS a Android, umožňuje zaznamenávat ukazatele s frekvencí 1-10 snímků za sekundu.
| Nástroj | Platforma | Metriky |
|---|---|---|
| Battery Historian | Android | WakeLock, Síť, GPS, CPU, Displej |
| Energy Profiler | Android Studio | CPU, Síť, GPS, Rádio v reálném čase |
| Energy Log | iOS (Xcode) | CPU, Síť, GPU, Displej, Poloha |
| PerfDog | iOS + Android | Energie, FPS, CPU, Paměť (vše dohromady) |
Podle Apple WWDC 2023 použití Energy Organiser umožňuje snížit průměrnou spotřebu energie aplikací o 15-25% díky identifikaci a odstranění regresí před vydáním aktualizace v App Store.
Často kladené dotazy
Sociální sítě a messengery (Facebook, Instagram, WhatsApp, Telegram) tradičně vedou ve spotřebě energie. Neustále synchronizují data, aktualizují kanál, přijímají push oznámení a používají GPS. Na druhém místě — hry s 3D grafikou, které současně zatěžují GPU a CPU, spotřebovávají až 400-600 mA·h za hodinu aktivní hry.
Ano, přímo. Obrazovka — nejnáročnější součást smartphonu na energii. Zvýšení frekvence z 60 Hz na 120 Hz zvyšuje spotřebu energie displeje o 30-50%. Moderní displeje s technologií LTPO však dynamicky mění frekvenci od 1 do 120 Hz v závislosti na obsahu, což snižuje dopad na baterii.
GPS s vysokou přesností spotřebuje přibližně 200-300 mA·h za hodinu nepřetržitého provozu. Pro srovnání, určování polohy přes Wi-Fi a mobilní základnové stanice (NETWORK_PROVIDER) spotřebuje pouze 20-40 mA·h za stejné období. Použijte Geofencing API pro zapnutí GPS pouze při vstupu do určené oblasti.
Nevyplatí se. Moderní operační systémy (Android a iOS) optimalizují procesy na pozadí samy. Vynucené zavření aplikace a opětovné spuštění spotřebuje více energie, než kdyby aplikace zůstala na pozadí. Výjimkou jsou aplikace, které explicitně způsobují problémy (určuje se pomocí statistiky baterie v nastavení).
Otevřete Nastavení > Baterie > Využití baterie. Systém zobrazí seznam aplikací s procentem spotřeby. Pro podrobnou analýzu použijte ADB: adb shell dumpsys batterystats a nahrajte dump do Battery Historian. Zobrazí nejen celkovou spotřebu, ale také rozpis podle součástí (WakeLock, Síť, GPS).
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také