Battery drain app: ottimizzare
Una app che scarica la batteria più del normale viene rapidamente disinstallata. iOS e Android espongono sezioni dedicate al consumo per app, e gli utenti le consultano. Ottimizzare il consumo significa progettare bene network, location, background tasks e sensori.
Networking
Le radio (Wi-Fi, cellulare) sono tra i componenti che consumano di più. Riduci le chiamate, usa compressione (gzip, brotli), batchifica le richieste, sfrutta cache HTTP, evita polling continuo (usa push o websocket persistenti). Su Android usa WorkManager per pianificare lavori in finestre opportune.
Location e sensori
GPS continuo e tra i drain peggiori. Usa la accuracy minima necessaria, abilita significant location changes su iOS, usa Geofencing al posto di location continua. I sensori (accelerometro, gyroscope) consumano molto se campionati ad alta frequenza: usa il rate più basso utile.
Background tasks
iOS: BGTaskScheduler per processi in background; minimizza il loro tempo di esecuzione. Android: WorkManager per lavori posticipabili, Foreground Service solo se realmente necessario. Mai svegliare il dispositivo senza motivo.
Network batching
Ogni risveglio radio costa batteria. Batchifica richieste: invece di 10 chiamate sparse su 1 minuto, invia un'unica richiesta. JobScheduler/WorkManager su Android e BGProcessingTask iOS schedulano lavori in finestre ottimali. Imposta requiresNetwork e requiresCharging dove applicabile.
Background restrictions
Android 10+ ha limitazioni rigide su location background e foreground services. Richiedi permessi solo se essenziali. iOS 13+ esegue background tasks solo in finestre brevi (max 30 secondi). Pianifica con BGTaskScheduler e mantieni i task idempotenti per ripresa.
Dark mode e display
Schermi OLED (iPhone X+, Pixel, Samsung S+) consumano molto meno con dark mode (fino al 30%). Supporta sempre dark mode. Riduci la luminosita massima dove possibile. Animazioni in pausa quando app in background.
Profiling avanzato
Xcode Energy Log Activity (Instruments) misura CPU, network, location, GPU energy. Android Battery Historian visualizza wakelock, jobs, doze mode. Identifica i top consumer e ottimizza dal più impattante. Misura su device reale, non simulatore.
Doze e App Standby Android
Da Android 6+, Doze mode mette il device in low-power state quando idle. App Standby riduce attività di background per app non usate. Per chiamare wakeup-job, usa setExactAndAllowWhileIdle (rare events). WorkManager rispetta automaticamente queste politiche. Test su device reale con adb shell dumpsys deviceidle.
Background fetch iOS
BGAppRefreshTask aggiorna dati periodicamente (max 30s). iOS decide quando eseguire in base a uso, ora del giorno, battery state. BGProcessingTask per task più lunghi (>30s) con connessione e charging requirement. Pianifica con scheduleAppRefresh; non garantito esecuzione, gestisci con grace degradation.
Procedura passo-passo
- Profila il consumo con Xcode Energy Log e Battery Historian (Android).
- Identifica i top consumer (network, GPS, CPU, display).
- Sostituisci polling con push o long polling efficienti.
- Riduci la frequenza di location/sensori al minimo necessario.
- Usa WorkManager/BGTaskScheduler per il background.
- Compressione e caching HTTP attivi su tutte le richieste.
- Test su dispositivi reali con scenari di uso prolungato.
Network efficiency
Riduce dimensione payload: gzip/brotli compression sempre, JSON minificato, fields hashing per ID lunghi. Protobuf o MessagePack per binary protocols (5-10x più compatti di JSON). HTTP/2 multiplex sostituisce multiple connessioni con una sola. QUIC e HTTP/3 riducono ulteriormente latency e battery cost. Migration vale soprattutto per app data-intensive.
Tools per battery profiling
iOS: Xcode Energy Log Activity nel Profile, Capacita Battery Usage in Settings. Android: adb shell dumpsys batterystats, Battery Historian per visualizzazione. Firebase Performance per RUM su batteria. Google Vitals in Play Console mostra battery e stuck wake locks aggregati. Combinazione di lab e RUM rivela problemi reali sui device degli utenti.
Errori comuni e come risolverli
- Polling ogni pochi secondi: passa a push o long polling.
- GPS sempre attivo: usa modalita low power o geofencing.
- Background service infinito: limita a finestre orarie.
- Animazioni continue: mettile in pausa quando non visibili.
- Logging eccessivo: limita in release.
Domande frequenti
D: Quanto deve consumare un'app media?
R: Sotto l'1% all'ora di uso passivo e <5-10% per ora di uso attivo intensivo.
D: Il dark mode aiuta?
R: Si, su schermi OLED puo ridurre il consumo del display fino al 30%.
D: Posso forzare la sveglia del device per push?
R: Su iOS no; su Android solo per Foreground Service o exact alarm con limitazioni recenti.
D: Background services drainano sempre batteria?
R: Solo se mal progettati. Servizi che si attivano correttamente in finestre opportune hanno consumo trascurabile.
Conclusione
Ottimizzazione batteria e fondamentale per retention. Strategia: monitora consumo, identifica top consumer, ottimizza incrementalmente. Test su device reali con scenari di uso prolungato. Combina con feedback utente in Play Console e App Store reviews. Una app che drena batteria viene disinstallata indipendentemente da quanto sia utile.
Per app con uso intensivo di sensori (fitness, navigation), valuta Sensor Batching API che raggruppa lectures riducendo wakeup. Su Android, SensorManager.registerListener con maxReportLatencyUs > 0 abilita batching. Riduce consumo di significativamente per scenari di tracking continuo.
Hai bisogno di aiuto?
Se vuoi sviluppare la tua app con G Tech Group, scrivici tramite il modulo di contatto.