2012-02-01 20 views
8

Sono relativamente nuovo per Android, quindi quello che sto chiedendo può sembrare ovvio (anche se ho letto tutte le domande con il titolo simile e ho cercato ampiamente). Devo monitorare l'accelerometro continuamente per lunghi periodi. Sono stati suggeriti due approcci:Android: servizio di primo piano vs. wakeLock

1) acquisire un wake lock parziale che viene trattenuto per tutto il tempo in cui viene monitorato l'accelerometro; e

2) monitorare l'accelerometro in un servizio in primo piano.

Il primo approccio sembra utilizzare molta durata della batteria. Il secondo approccio dovrebbe comportare un servizio che viene ucciso raramente, ma non sono sicuro di cosa significhi "raramente". Quale approccio dovrebbe essere usato e ci sono alternative che dovrei prendere in considerazione?

+0

Hey Doug, dove hai preso quelle informazioni? – Bush

+0

Se sei ancora interessato prova l'approccio della gestione degli allarmi: http://stackoverflow.com/questions/15451347/android-design-background-long-running-service-or-alarmmanager –

risposta

5

In possesso di un WakeLock e un primo piano Service non sono realmente correlati e non devono essere confrontati a quale direzione è la migliore.

Il sistema operativo Android è progettato per sostituire i processi in base a una serie di fattori. Ciò significa che il tuo processo potrebbe essere ucciso in qualsiasi momento da Android e fornisce una struttura per aiutare te, lo sviluppatore, a garantire che la tua app possa salvare e ripristinare il suo stato quando ciò accade.

A WakeLock impedisce semplicemente la CPU di dormire che aiuta a risparmiare batteria quando il telefono non è in uso.

Ora, una combinazione di entrambi consente di ottenere ciò che si desidera, ma a un costo utente eccezionale. Non vorrei un'app nel mio telefono per mantenere la CPU costantemente in esecuzione o un'icona di notifica che si visualizzasse costantemente nella barra delle notifiche (questo è ciò che fa un servizio in primo piano).

Ricordare che l'avvio di un servizio in modalità primo piano non garantisce l' l'app non verrà uccisa. Potrebbe ancora accadere anche se raramente.

Che cosa stai cercando di ottenere qui? Perché continuare a monitorare l'accelerometro dei dispositivi? Forse dovresti monitorarlo solo quando invece lo Activity della tua app è in primo piano.

+2

Tutti i servizi in primo piano contengono i blocchi di scia. Per esempio, il le app musicali contengono il blocco parziale della sveglia. È questo il caso di tutti i servizi in primo piano? – Basher51

1

Ho avuto esattamente lo stesso bisogno e problema. Credo che la soluzione sia utilizzare sia un wake wake parziale che un servizio in primo piano. Android proverà a non uccidere un servizio in background che detiene un blocco di attivazione, ma è libero di ucciderlo quando ha bisogno delle risorse ed eventualmente di riavviarlo in un secondo momento. Va bene per molti scopi, ma almeno nel mio caso non è abbastanza buono. Mettere un servizio in primo piano è il modo per dire ad Android che ucciderlo non è accettabile. Sì, potrebbe ancora succedere in situazioni estreme, ma ora sarebbe una violazione del contratto API mentre con un servizio in background Android è libero di ucciderlo. Dovresti quindi probabilmente scrivere codice come se ciò non dovesse mai accadere, ma solo sapere che questo è un errore possibile ma probabilmente raro.

+0

Tutti i servizi in primo piano contengono i blocchi di attivazione. Ad esempio, le app musicali contengono blocchi di attivazione parziale. È questo il caso di tutti i servizi in primo piano? – Basher51