Ökad batteriförbrukning — ett av de vanligaste klagomålen från användare av mobila appar. Appen börjar förbruka onormalt mycket energi, vilket orsakar snabb urladdning av enheten även i bakgrundsläge. Enligt Google I/O 2023 har upp till 30% av apparna i Google Play problem med energiförbrukning, vilket direkt påverkar användarbehållandet. I den här artikeln kommer vi att gå igenom orsaker, diagnos och optimeringsmetoder.
Huvudpunkter
Ökad batteriförbrukning — ett tillstånd där en mobil app förbrukar betydligt mer energi än förväntat i ett typiskt användningsscenario. Användaren märker att enheten laddas ur 20-30% snabbare än vanligt efter installation eller uppdatering av appen.
Moderna mobila operativsystem — Android och iOS — har inbyggda mekanismer för att kontrollera energiförbrukningen. Android använder Battery Optimization och iOS använder Background Modes. Men felaktig användning av API kan kringgå dessa mekanismer.
Enligt forskning från Purdue University (2021) förbrukar cirka 60% av apparna energi för bakgrundsuppgifter utan uppenbart behov. Detta är särskilt karakteristiskt för appar med reklam, analys och permanenta nätverksanslutningar.
Energiförbrukning mäts i mA·h (milliamperetimmar). Android tillhandahåller data via BatteryManager API, som spårar förbrukningen för varje komponent: CPU, radiomodul, GPS, display och sensorer.
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 = aktuell laddningsprocent
BatteryManager API gör det möjligt att få aktuell laddningsprocent och batterikapacitet, men ger inte information per app — för det behövs systemverktyg.
WakeLock — den farligaste mekanismen för batteriet. Om en app håller WakeLock utan att frigöra det, går enheten inte in i viloläge. Varje timme som WakeLock hålls förbrukar cirka 50-80 mA·h.
Nätverksförfrågningar utan gruppering — den näst vanligaste orsaken. Varje gång appen upprättar en nätverksanslutning, går radiomodulen från energisparläge till aktivt läge. Frekventa korta förfrågningar med intervall kortare än 5 minuter håller radiomodulen konstant aktiv.
Bestämning av GPS-plats med hög noggrannhet (GPS_PROVIDER) förbrukar 10-15 gånger mer energi än ungefärlig bestämning (NETWORK_PROVIDER). Kontinuerlig platsuppdatering i bakgrunden är ett av de främsta klagomålen från användare.
Enligt Android Developers Blog förbrukar en genomsnittlig app cirka 15% av enhetens totala batteriförbrukning. Överskridande av denna nivå kräver en obligatorisk energirevision.
Battery Historian — Googles officiella verktyg för analys av energiförbrukning. Det tar emot en BatteryStats-dump från ADB och visualiserar förbrukningen per komponent: CPU, Nätverk, GPS, WakeLock och display.
För att skapa en dump, kör kommandot: adb shell dumpsys batterystats. Efter att ha samlat in data under 2-3 timmars normal användning kan du ladda rapporten i Battery Historian för analys.
Android Energy Profiler i Android Studio spårar energiförbrukning i realtid. Den visar förbrukningen av CPU, Nätverk, GPS och display för varje app-operation.
# Återställ batteristatistik före test
adb shell dumpsys batterystats --reset
# Använd appen i 2-3 timmar
# Exportera dump för Battery Historian
adb shell dumpsys batterystats > batterystats_dump.txt
För iOS används Energy Log via Xcode — Instruments. Den samlar in energiförbrukningsdata uppdelad per modul: CPU, Nätverk, GPU, Display, Plats. Lästid: 15-30 minuter för analys av en session.
På en fysisk iOS-enhet visas energiförbrukningsstatistik även i Inställningar > Batteri. Om appen finns bland de tio mest förbrukande — är det en signal för optimering.
WorkManager — standard-API för bakgrundsuppgifter som tar hänsyn till batteristatus, nätverk och Doze-läge. Det garanterar att uppgiften utförs under optimala förhållanden, inte omedelbart, vilket sparar upp till 40% energi på bakgrundsoperationer.
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(
Constraints.Builder()
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.setRequiresNetworkType(NetworkType.CONNECTED)
.build()
)
.build()
WorkManager.getInstance(this).enqueue(workRequest)
Gruppering av förfrågningar — att kombinera flera nätverksoperationer i en kommunikationssession. Istället för 10 separata förfrågningar utför appen en grupperad förfrågan, vilket minskar radiomodulens aktiva tid från 30 sekunder till 2-3 sekunder.
FusedLocationProviderClient från Google Play Services väljer den optimala platskällan baserat på önskad noggrannhet. För bakgrundsuppgifter, använd prioriteten PRIORITY_BALANCED_POWER_ACCURACY — detta ger noggrannhet upp till 100 meter med minimal batteriförbrukning.
I iOS, använd Significant Location Change istället för Continuous Location. Detta gör det möjligt att få uppdateringar endast vid betydande förflyttning (mer än 500 meter), inte varannan sekund.
Android Battery Historian — Googles webbverktyg för visualisering av BatteryStats-data. Stöder import av dumpar, färgkodning av komponenter och jämförelse av sessioner. Huvudmått: WakeLock-tid, radiomodulaktivitet, GPS-sessioner.
Xcode Energy Organizer samlar in energiförbrukningsdata från produktionsanvändare via TestFlight och App Store. Du får en rapport om genomsnittlig förbrukning på olika enheter och iOS-versioner. Detta gör det möjligt att spåra regressioner efter uppdateringar.
PerfDog (Tencent) — ett plattformsoberoende verktyg för prestandatestning, inklusive mätningar av energiförbrukning. Stöder iOS och Android, möjliggör inspelning av indikatorer med en frekvens på 1-10 bilder per sekund.
| Verktyg | Plattform | Mått |
|---|---|---|
| Battery Historian | Android | WakeLock, Nätverk, GPS, CPU, Display |
| Energy Profiler | Android Studio | CPU, Nätverk, GPS, Radio i realtid |
| Energy Log | iOS (Xcode) | CPU, Nätverk, GPU, Display, Plats |
| PerfDog | iOS + Android | Energi, FPS, CPU, Minne (alla tillsammans) |
Enligt Apple WWDC 2023 gör användningen av Energy Organiser det möjligt att minska genomsnittlig energiförbrukning för appar med 15-25% genom att identifiera och åtgärda regressioner innan uppdateringen släpps i App Store.
Vanliga frågor
Sociala nätverk och meddelandeappar (Facebook, Instagram, WhatsApp, Telegram) leder traditionellt i energiförbrukning. De synkroniserar ständigt data, uppdaterar flödet, tar emot push-notiser och använder GPS. På andra plats — spel med 3D-grafik som samtidigt belastar GPU och CPU, och förbrukar upp till 400-600 mA·h per timme aktivt spelande.
Ja, direkt. Skärmen — den mest energikrävande komponenten i en smartphone. Ökning av frekvensen från 60 Hz till 120 Hz ökar displayens energiförbrukning med 30-50%. Moderna skärmar med LTPO-teknik ändrar dock dynamiskt frekvensen från 1 till 120 Hz beroende på innehåll, vilket minskar påverkan på batteriet.
GPS med hög noggrannhet förbrukar cirka 200-300 mA·h per timme kontinuerlig drift. Som jämförelse, platsbestämning via Wi-Fi och mobila basstationer (NETWORK_PROVIDER) förbrukar endast 20-40 mA·h under samma period. Använd Geofencing API för att aktivera GPS endast när du går in i ett specifikt område.
Inte värt. Moderna operativsystem (Android och iOS) optimerar bakgrundsprocesser själva. Att tvångsstänga en app och starta om den förbrukar mer energi än om appen hade förblivit i bakgrunden. Undantag — appar som tydligt orsakar problem (fastställs via batteristatistik i inställningarna).
Öppna Inställningar > Batteri > Batterianvändning. Systemet visar en lista över appar med förbrukningsprocent. För detaljerad analys, använd ADB: adb shell dumpsys batterystats och ladda dumpen i Battery Historian. Detta visar inte bara den totala förbrukningen utan även uppdelningen per komponent (WakeLock, Nätverk, GPS).
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också