Žere baterii v mobilním vývoji: co to je, příčiny a metody boje

Autor: IT Sectr Publikováno: 2026-07-28 Doba čtení: 10 min

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

  • WakeLock — hlavní příčina úniku energie, pokud není včas uvolněn
  • Požadavky na síť bez seskupování nutí rádiový modul neustále pracovat
  • Poloha s vysokou přesností spotřebuje 10krát více energie než přibližná
  • WorkManager — standardní API pro úlohy na pozadí s ohledem na stav baterie
  • Profilování přes Battery Historian a Energy Profiler je povinné před vydáním

Co znamená „žere baterii“ v mobilních aplikacích?

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.

Jak se měří spotřeba baterie?

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.

kotlin
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.

Hlavní příčiny zvýšené spotřeby energie

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ů.

  • Animace a vykreslování bez hardwarové akcelerace zatěžují GPU
  • Senzory (akcelerometr, gyroskop) na pozadí bez potřeby
  • Bluetooth skenování s vysokou frekvencí vyhledávání zařízení
  • Ukládání do mezipaměti velkého objemu dat na SD kartu bez ohledu na stav baterie

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.

Jak diagnostikovat problémy s baterií?

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.

bash
# 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

Analýza v iOS

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.

Metody optimalizace spotřeby energie

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í.

kotlin
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setConstraints(
        Constraints.Builder()
            .setRequiresCharging(true)
            .setRequiresBatteryNotLow(true)
            .setRequiresNetworkType(NetworkType.CONNECTED)
            .build()
    )
    .build()
WorkManager.getInstance(this).enqueue(workRequest)

Seskupování síťových požadavků

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.

  • Retrofit s OkHttp podporuje seskupování přes Interceptor
  • Firebase Cloud Messaging umožňuje sloučit oznámení do jedné relace
  • GraphQL — náhrada REST, kde jeden dotaz nahrazuje několik

Optimalizace práce s polohou

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.

Nástroje pro analýzu spotřeby energie

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ástrojPlatformaMetriky
Battery HistorianAndroidWakeLock, Síť, GPS, CPU, Displej
Energy ProfilerAndroid StudioCPU, Síť, GPS, Rádio v reálném čase
Energy LogiOS (Xcode)CPU, Síť, GPU, Displej, Poloha
PerfDogiOS + AndroidEnergie, 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

Která aplikace nejvíce žere baterii?

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.

Ovlivňuje obnovovací frekvence obrazovky spotřebu baterie?

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.

Jak GPS ovlivňuje spotřebu energie?

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.

Vyplatí se ručně zavírat aplikace na pozadí?

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í).

Jak zjistit, která aplikace žere baterii na Androidu?

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í

  • Zvýšená spotřeba baterie — abnormální spotřeba energie aplikací, způsobující rychlé vybíjení zařízení a zhoršující uživatelský zážitek
  • Hlavní příčiny: WakeLock, časté síťové požadavky, GPS s vysokou přesností, neoptimalizované animace a služby na pozadí
  • WakeLock — nejnebezpečnější mechanismus; vždy jej uvolňujte v bloku try/finally nebo použijte WakeLock.acquire s časovým limitem
  • WorkManager — standardní API pro úlohy na pozadí s ohledem na stav baterie a sítě, doporučený Googlem
  • Seskupování požadavků snižuje spotřebu energie rádiového modulu o 30-50% díky snížení počtu přechodů mezi režimy
  • Diagnostika přes Battery Historian, Energy Profiler a Xcode Energy Organiser je povinná před každým vydáním
  • Profitujte spotřebu energie na fyzických zařízeních — emulátory neposkytují přesné údaje o baterii

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í.

Prodiskutovat projekt

Přečtěte si také