2012-08-15 16 views
11

Mi piacerebbe creare un'applicazione Android con funzioni di monitoraggio in tempo reale. Una funzione di monitoraggio consiste nel controllare il flusso audio. L'altra funzione è quella di interagire con un sensore periferico. Queste funzioni di monitoraggio possono essere attivate da altri. Inoltre, al fine di risparmiare energia, la funzione audio verrà eseguita in modalità polling, cioè per un certo periodo di tempo e una sveglia per un certo periodo di tempo.applicazioni di monitoraggio Android

Sto considerando come progettare l'applicazione Android.

  • Se progettare la funzione audio come servizio o attività? Il problema è che se è progettato come un'attività, la funzione audio sarà disattivata se lo schermo si spegne dopo un certo periodo di tempo.

  • Come progettare la funzione di polling? Utilizzare un AlarmManager o una filettatura interna con Timer?

Il mio obiettivo è quello di risparmiare il consumo di energia il più possibile. Grazie.

+0

Che cos'è "verifica il flusso audio"? – CommonsWare

+0

utilizzare AudioRecord per leggere il flusso del buffer audio e controllare il livello di decibel e creare il registro. Grazie. – babysnow

risposta

1

Si consiglia di seguire

a) Utilizzare un servizio. L'attività è un'entità di breve durata (funziona solo mentre è sullo schermo)

b) Rendere il servizio in primo piano (leggi questo: http://developer.android.com/reference/android/app/Service.html#startForeground(int, android.app.Notification). Ciò ridurrà la possibilità che il sistema uccida il servizio

c) Nel servizio, avviare una discussione e fare tutto il necessario nella discussione.

d) Se si desidera eseguire periodicamente, basta Thread.sleep() nel thread (quando Thread dorme non consuma cicli della CPU).

Credo che c) ed) sia preferibile ad AlarmManager. Ecco il pezzo dalla documentazione (http://developer.android.com/reference/android/app/AlarmManager.html): "Nota: Alarm Manager è destinato ai casi in cui si desidera che il codice dell'applicazione venga eseguito in uno specifico tempo, anche se la tua applicazione non è attualmente in esecuzione. Per le normali operazioni di cronometraggio (tick, timeout, ecc.) è più semplice e molto più efficiente usare Handler. "

Dato che l'applicazione è in esecuzione, è preferibile disporre di alcuni thread in esecuzione permanente ed eseguire qualcosa su di esso. In generale, Handler, HandlerThread, MessageQueue sono solo classi di convenienza per la gestione e la programmazione dei messaggi più complessi. Sembra che il tuo caso sia abbastanza semplice e il solito Thread dovrebbe essere sufficiente.

1

concordante con Victor, è sicuramente desidera utilizzare un servizio, e pin in memoria chiamando startForeground()

Tuttavia vi consiglio di guardare in utilizzando il costruito nel sistema Handler; posiziona le tue funzionalità in un Runnable e chiama mhandler.postDelayed(myRunnable, <some point in future>); questo permetterà al framework Android di sfruttare al meglio la gestione energetica.

0

Questo è un servizio.

E si potrebbe desiderare un po 'di robustezza supplementare: il servizio può essere ucciso e NON riavviato in seguito, pur essendo un servizio in primo piano. Questo fermerà il tuo monitoraggio.

Avvia il servizio dall'interfaccia utente. Se vuoi che il servizio sopravviva al riavvio del dispositivo, avvialo anche da un BroadcastReceiver per android.intent.action.BOOT_COMPLETED.

Creare un thread nel servizio come descritto in altre risposte qui.

Inoltre, utilizzare Alarm Manager per riavviare periodicamente il servizio. Più chiamate startService() sono OK. Se è già in esecuzione, il servizio continuerà a funzionare. Ma se è stato dimenticato dal sistema, ad esempio, dopo una serie di condizioni di risorse basse, verrà riavviato ora.

Pianificare questi allarmi in modo responsabile: per essere un buon cittadino, impostare la frequenza assolutamente minima. Dopotutto, Android aveva alcuni buoni motivi per uccidere il servizio.

Con alcuni servizi, potrebbero essere necessari ulteriori passaggi, ma in questo caso questo approccio sembra essere sufficiente.

Problemi correlati