Megnövekedett akkumulátorfogyasztás — a mobilalkalmazás-felhasználók egyik leggyakoribb panasza. Az alkalmazás abnormálisan sok energiát kezd fogyasztani, ami az eszköz gyors lemerülését okozza még háttérmódban is. A Google I/O 2023 szerint a Google Play alkalmazásainak akár 30%-a rendelkezik energiafogyasztási problémákkal, ami közvetlenül befolyásolja a felhasználók megtartását. Ebben a cikkben megvizsgáljuk az okokat, a diagnosztikát és az optimalizálási módszereket.
Főbb pontok
Megnövekedett akkumulátor-fogyasztás — az az állapot, amikor egy mobilalkalmazás lényegesen több energiát fogyaszt, mint amennyi egy tipikus használati forgatókönyvben várható. A felhasználó észreveszi, hogy az eszköz az alkalmazás telepítése vagy frissítése után 20-30%-kal gyorsabban merül le, mint szokásosan.
A modern mobil operációs rendszerek — Android és iOS — beépített mechanizmusokkal rendelkeznek az energiafogyasztás szabályozására. Az Android a Battery Optimizationt, az iOS pedig a Background Modest használja. Az API-k helytelen használata azonban megkerülheti ezeket a mechanizmusokat.
A Purdue University kutatása (2021) szerint az alkalmazások kb. 60%-a nyilvánvaló szükség nélkül fogyaszt energiát háttérfeladatokra. Ez különösen jellemző a hirdetéseket, analitikát és állandó hálózati kapcsolatot használó alkalmazásokra.
Az energiafogyasztást mA·h (milliamper-óra) egységben mérik. Az Android a BatteryManager API-n keresztül szolgáltat adatokat, amely nyomon követi az egyes komponensek fogyasztását: CPU, rádiómodul, GPS, kijelző és érzékelők.
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ális töltési százalék
BatteryManager API lehetővé teszi az aktuális töltési százalék és az akkumulátor kapacitásának lekérését, de nem ad alkalmazásonkénti részletességet — ehhez rendszer-segédprogramok szükségesek.
WakeLock — a legveszélyesebb mechanizmus az akkumulátor számára. Ha egy alkalmazás a WakeLock-ot felszabadítás nélkül tartja, az eszköz nem megy alvó módba. Minden óra, amíg a WakeLock aktív, körülbelül 50-80 mA·h energiát fogyaszt.
Hálózati kérések csoportosítás nélkül — a második leggyakoribb ok. Minden alkalommal, amikor az alkalmazás hálózati kapcsolatot létesít, a rádiómodul energiatakarékos módból aktív módba vált. A gyakori rövid kérések 5 perc nál rövidebb időközönkként állandóan aktívan tartják a rádiómodult.
A GPS-helymeghatározás nagy pontossággal (GPS_PROVIDER) 10-15-ször több energiát fogyaszt, mint a közelő meghatározás (NETWORK_PROVIDER). A helyzet folyamatos frissítése a háttérben a felhasználók egyik fő panasza.
Az Android Developers Blog szerint egy átlagos alkalmazás az eszköz teljes akkumulátor-fogyasztásának kb. 15%-át fogyasztja. Ennek a szintnek a túllépése kötelező energiaauditot igényel.
Battery Historian — a Google hivatalos eszköze az energiafogyasztás elemzéséhez. ADB-ből származó BatteryStats dump-ot fogad, és vizualizálja a fogyasztást komponensenként: CPU, Hálózat, GPS, WakeLock és kijelző.
A dump létrehozásához futtassa a parancsot: adb shell dumpsys batterystats. A 2-3 órányi normál használat során összegyűjtött adatok után betöltheti a jelentést a Battery Historian-ba elemzés céljából.
Android Energy Profiler az Android Studio-ban valós idejű energiafogyasztást követ nyomon. Megmutatja a CPU, Hálózat, GPS és kijelző fogyasztását az alkalmazás minden műveletéhez.
# Állítsa vissza az akkumulátor-statisztikákat a teszt előtt
adb shell dumpsys batterystats --reset
# Használja az alkalmazást 2-3 órán keresztül
# Exportálja a dump-ot a Battery Historian számára
adb shell dumpsys batterystats > batterystats_dump.txt
Az iOS esetében az Energy Log-ot használják az Xcode-on keresztül — Instruments. Modulonként bontva gyűjti az energiafogyasztási adatokat: CPU, Hálózat, GPU, Kijelző, Helymeghatározás. Olvasási idő: 15-30 perc egy munkamenet elemzéséhez.
Egy fizikai iOS-eszközön az energiafogyasztási statisztikák a Beállítások > Akkumulátor menüben is megjelennek. Ha az alkalmazás a top 10 fogyasztó közé tartozik — ez optimalizálási jelzés.
WorkManager — szabványos API háttérfeladatokhoz, amely figyelembe veszi az akkumulátor állapotát, a hálózatot és a Doze módot. Garantálja a feladat optimális körülmények közötti végrehajtását, nem azonnal, ami akár 40% energiát takarít meg a háttérműveleteknél.
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(
Constraints.Builder()
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.setRequiresNetworkType(NetworkType.CONNECTED)
.build()
)
.build()
WorkManager.getInstance(this).enqueue(workRequest)
Kérések csoportosítása — több hálózati művelet egyetlen kommunikációs munkamenetbe történő egyesítése. 10 külön kérés helyett az alkalmazás egy csoportos kérést hajt végre, ami a rádiómodul aktív idejét 30 másodpercről 2-3 másodpercre csökkenti.
FusedLocationProviderClient a Google Play Services-től a kívánt pontosságtól függően választja ki az optimális helyforrást. Háttérfeladatokhoz használja a PRIORITY_BALANCED_POWER_ACCURACY prioritást — ez 100 méteres pontosságot biztosít minimális akkumulátor-fogyasztás mellett.
iOS-ben a Continuous Location helyett használja a Significant Location Change-et. Ez lehetővé teszi a frissítések fogadását csak jelentős mozgás (több mint 500 méter) esetén, nem pedig néhány másodpercenként.
Android Battery Historian — a Google webeszköze a BatteryStats adatainak vizualizálására. Támogatja a dump-ok importálását, a komponensek színkódolását és a munkamenetek összehasonlítását. Fő metrikák: WakeLock-időtartam, rádiómodul-aktivitás, GPS-munkamenetek.
Xcode Energy Organizer energiafogyasztási adatokat gyűjt a éles felhasználóktól a TestFlight és az App Store segítségével. Jelentést kap az átlagos fogyasztásról különböző eszközökön és iOS-verziókon. Ez lehetővé teszi a regressziók nyomon követését frissítések után.
PerfDog (Tencent) — többplatformos teljesítménytesztelő eszköz, amely energiafogyasztási méréseket is tartalmaz. Támogatja az iOS-t és Androidot, lehetővé teszi a mutatók rögzítését 1-10 képkocka/másodperc frekvenciával.
| Eszköz | Platform | Metrikák |
|---|---|---|
| Battery Historian | Android | WakeLock, Hálózat, GPS, CPU, Kijelző |
| Energy Profiler | Android Studio | CPU, Hálózat, GPS, Rádió valós időben |
| Energy Log | iOS (Xcode) | CPU, Hálózat, GPU, Kijelző, Helymeghatározás |
| PerfDog | iOS + Android | Energia, FPS, CPU, Memória (mindegyik együtt) |
Az Apple WWDC 2023 szerint az Energy Organiser használata lehetővé teszi az alkalmazások átlagos energiafogyasztásának 15-25%-kal történő csökkentését a regressziók azonosításával és kijavításával, mielőtt a frissítés megjelenne az App Store-ban.
Gyakran Ismételt Kérdések
Közösségi hálózatok és üzenetküldők (Facebook, Instagram, WhatsApp, Telegram) hagyományosan vezetnek az energiafogyasztásban. Folyamatosan szinkronizálják az adatokat, frissítik a hírfolyamot, push-értesítéseket kapnak és GPS-t használnak. A második helyen — a 3D grafikás játékok állnak, amelyek egyszerre terhelik a GPU-t és a CPU-t, akár 400-600 mA·h-t fogyasztva egy óra aktív játék alatt.
Igen, közvetlenül. A képernyő — az okostelefon leginkább energiaigényes komponense. A frekvencia 60 Hz-ről 120 Hz-re történő növelése 30-50%-kal növeli a kijelző energiafogyasztását. A modern LTPO-technológiás kijelzők azonban dinamikusan változtatják a frekvenciát 1 és 120 Hz között a tartalomtól függően, ami csökkenti az akkumulátorra gyakorolt hatást.
GPS nagy pontossággal kb. 200-300 mA·h-t fogyaszt egy óra folyamatos munka alatt. Összehasonlításképpen, a helymeghatározás Wi-Fi-n és mobil bázisállomásokon keresztül (NETWORK_PROVIDER) ugyanazon időszak alatt csak 20-40 mA·h-t fogyaszt. Használja a Geofencing API-t a GPS bekapcsolásához csak egy adott területre történő belépéskor.
Nem érdemes. A modern operációs rendszerek (Android és iOS) maguk optimalizálják a háttérfolyamatokat. Az alkalmazás kényszerített bezárása és újraindítása több energiát fogyaszt, mintha az alkalmazás a háttérben maradt volna. Kivétel — azok az alkalmazások, amelyek nyilvánvalóan problémákat okoznak (a beállításokban található akkumulátor-statisztikán keresztül állapítható meg).
Nyissa meg a Beállítások > Akkumulátor > Akkumulátorhasználat menüt. A rendszer megjeleníti az alkalmazások listáját a fogyasztás százalékával. Részletes elemzéshez használja az ADB-t: adb shell dumpsys batterystats és töltse be a dump-ot a Battery Historian-ba. Ez nemcsak a teljes fogyasztást mutatja, hanem a komponensek szerinti bontást is (WakeLock, Hálózat, GPS).
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is