2012-09-18 8 views
6

Estoy desarrollando una pequeña aplicación de utilidad que escanea códigos de barras 2D y luego envía cada código de barras a un servicio de intención donde se realiza una tarea más larga.¿Es posible sostener múltiples Wake Locks?

Cuando se muestra la actividad, debe evitar que el dispositivo entre en suspensión, hasta que el código de barras se procese en el servicio. Si el servicio finaliza el procesamiento, se detiene, pero la actividad aún debe estar visible.

Me gustaría mantener un SCREEN_DIM_WAKE_LOCK WakeLock durante el ciclo de vida de la actividad, pero como este tipo no impide que la CPU duerma, también necesitaría adquirir un PARTIAL_WAKE_LOCK en la actividad cuando se escanea un nuevo código 2D , y libérelo en el servicio intencionado después de que haya sido procesado.

El propósito de SCREEN_DIM_WAKE_LOCK es evitar al usuario la inconveniencia de presionar el botón de encendido cada pocos segundos para reactivar el dispositivo y poder leer un nuevo código de barras. El usuario tendrá que leer una gran cantidad de códigos, uno tras otro, y la actividad debería estar presente incluso durante los breves intervalos en los que no hay interacción del usuario.

Sé que en Android no hay garantía del 100% de que la aplicación esté en la parte superior, no cerrada o orientada debido a varias condiciones que mi aplicación no puede controlar, pero me gustaría llegar lo más lejos que pueda.

¿Es posible mantener varios WakeLocks? ¿Dónde podrían declararse accesados ​​tanto por la actividad como por el servicio? (Singleton, ¿extiende la Aplicación?)

Respuesta

9

Es posible mantener varios WakeLocks. De hecho, está hecho todo el tiempo cuando varias aplicaciones se sincronizan al mismo tiempo cuando la pantalla está apagada. (Imagine que las aplicaciones de GMail y Facebook se sincronizan al mismo tiempo cuando la pantalla está bloqueada. No se conocen entre sí tendrán WakeLocks diferentes. Pueden o no ser diferentes tipos de WakeLocks)

Android se asegurará de que todos tengan se cumplen las expectativas (máximo gasto de batería en otras palabras)

En mi opinión, creo que estás pensando demasiado en el hecho de que necesitas un SCREEN_DIM_WAKE_LOCK ya que esto puede drenar MUCHA batería, pero puedo estar equivocado. dependiendo de tu caso de uso.

Así que la respuesta corta es SÍ. Puede mantener múltiples WakeLocks y Android (debería) actuar como se espera. Lo único a tener en cuenta es que liberas ambas Wakelocks correctamente.

En el problema de estar en la parte superior de la pantalla, creo que deberías liberar el WakeLock de tu actividad cuando pase a estado Pausado (cuando de alguna manera esté otra actividad arriba, o usa intencionalmente el botón de encendido). Porque en este punto, el usuario está interactuando con otra aplicación, y debe respetarla y dejar que controle su propio comportamiento. No tiene que renunciar al bloqueo parcial de activación de su servicio hasta que haya terminado.

Espero que esto ayude.

+0

+1. Pero estoy lanzando la pantalla WakeLock en 'onStop', porque no quiero que duerma cuando presiono un cuadro de diálogo. –

+0

Supuse que cuando un cuadro de diálogo está en el frente, ya no está escaneando códigos de barras, porque el usuario tiene que responder al diálogo, ¿no está bien dejar que el sistema duerma, si el uso no responde al diálogo a tiempo? – Madushan

+0

Sí, bueno, todo depende de cuánto tiempo tome el temporizador de reposo. Si lleva 3 segundos, es molesto presionar el botón de encendido. Si lleva más tiempo, estoy de acuerdo. Dependiendo de la carga de trabajo, incluso podría volcar el bloqueo de la pantalla. –

Cuestiones relacionadas