2012-09-18 8 views
6

Sto sviluppando una piccola applicazione di utilità che analizza i codici a barre 2D e quindi invia ogni codice a barre a un IntentService in cui viene eseguita un'attività più lunga.È possibile contenere più blocchi di sveglia?

Quando viene visualizzata l'attività, è necessario impedire che il dispositivo si blocchi, finché il codice a barre non viene elaborato nel servizio. Se il servizio termina l'elaborazione, si arresta, ma l'attività dovrebbe essere ancora visibile.

Mi piacerebbe tenere un SCREEN_DIM_WAKE_LOCK WakeLock durante il ciclo di vita dell'attività, ma poiché questo tipo non impedisce la CPU di dormire, dovrei anche acquisire un PARTIAL_WAKE_LOCK nell'attività quando viene scansionato un nuovo codice 2D e rilasciarlo nel servizio intent dopo che è stato elaborato.

Lo scopo SCREEN_DIM_WAKE_LOCK è di evitare all'utente l'inconveniente di premere il pulsante di accensione ogni pochi secondi per riattivare il dispositivo e poter leggere un nuovo codice a barre. L'utente dovrà leggere un gran numero di codici uno dopo l'altro e l'attività dovrebbe essere in giro anche per gli intervalli brevi in ​​cui non c'è interazione dell'utente.

So che in Android non è garantita al 100% che l'app sia in primo piano, non chiusa o in primo piano a causa di diverse condizioni che la mia app non può controllare, ma mi piacerebbe andare il più lontano possibile.

Quindi è possibile tenere più WakeLock? Dove potrebbero essere dichiarati essere accesi sia dall'attività che dal servizio? (Singleton, estensione dell'applicazione?)

risposta

9

È possibile mantenere più WakeLock. Di fatto, viene eseguito sempre quando più applicazioni si sincronizzano contemporaneamente quando lo schermo è spento. (Immagina di sincronizzare le tue app GMail e Facebook allo stesso tempo quando lo schermo è bloccato. Non sanno che l'un l'altro avrà WakeLock diversi. Può o non può essere diverso tipo di WakeLock)

Android farà in modo che tutti le aspettative sono soddisfatte (scarico massimo della batteria in altre parole.)

A mio parere, penso che tu stia pensando troppo al fatto che hai bisogno di un SCREEN_DIM_WAKE_LOCK in quanto questo può esaurire accidentalmente un sacco di batteria, ma potrei sbagliarmi a seconda del tuo caso d'uso.

Quindi la risposta breve è SI. Puoi tenere più WakeLock e Android funzionerà come dovrebbe. L'unica cosa da tenere a mente è che rilasciate entrambi i Wakelock correttamente.

Nella questione di arrivare in cima allo schermo, penso che dovresti rilasciare il WakeLock della tua attività quando va in stato di pausa (quando in qualche modo un'altra attività è in alto, o usare intenzionalmente il pulsante di accensione). Perché a questo punto, l'utente sta interagendo con un'altra app, e dovresti rispettarla e lasciarla controllare il suo stesso comportamento. Non devi rinunciare al blocco parziale del servizio finché non hai finito.

Spero che questo aiuti.

+0

+1. Ma sto rilasciando lo schermo WakeLock in 'onStop', perché non voglio che vada a letto quando spingo una finestra di dialogo. –

+0

Supponevo che quando una finestra di dialogo è in primo piano, non stai più scandendo i codici a barre, perché l'utente deve rispondere alla finestra di dialogo, Non è giusto lasciare che il sistema dorme, se l'uso non risponde al dialogo nel tempo? – Madushan

+0

Sì, tutto dipende da quanto tempo impiega lo sleep timer. Se ci vogliono 3 secondi, è fastidioso premere il pulsante di accensione. Se ci vuole più tempo, ci sto bene. A seconda del carico di lavoro, potrei persino scaricare il blocco della luminosità dello schermo. –