Pregunta

Soy nuevo a la noción de WakeLock y necesito su ayuda.

Preguntas:

  1. Asumo WakeLock que haber algún tipo de bloqueo que, cuando se llevó a cabo por los evita que el código de ejecución del dispositivo de dormir. ¿Y si el dispositivo ya está en modo de suspensión / en espera, se ejecuta el código, entonces? Suponiendo que nunca adquiriría una WakeLock?

  2. Cuando una tarea larga duración (aprox 7-8 seg) se realiza en un subproceso de fondo (AsyncTask) debería ser molestado sobre la celebración de un WakeLock? ¿El AsyncTask ya adquirir para mí?

  3. enlaces a la documentación oficial y valoración crítica de wakelocks son apreciadas.

Gracias.

¿Fue útil?

Solución

1. Si el teléfono está en modo de suspensión completa, aparte de una llamada telefónica entrante, podría utilizar un AlarmManager intención de activar el teléfono.

A partir de la documentación de la clase AlarmManager :

  

El Gestor de alarma tiene un raíz de la CPU   lock , siempre y cuando los receptores de alarma   método OnReceive () se está ejecutando. Esta   garantiza que el teléfono no se   el sueño hasta que haya terminado la manipulación   la transmisión. Una vez OnReceive ()   devoluciones, los comunicados de Administrador de alarmas   este bloqueo estela. Esto significa que el   teléfono voluntad en algunos casos dormir tan pronto   como su ultima método OnReceive ().   Si el receptor de alarma llama   Context.startService (), es posible   que el teléfono va a dormir antes de la   servicio solicitado se puso en marcha. A   evitar esto, su BroadcastReceiver   Servicio y tendrá que implementar una   la política de bloqueo de raíz separada para asegurar   que el teléfono sigue funcionando hasta   el servicio esté disponible.

2. Si se trabaja con un AsyncTask , querrá publicar los resultados con el subproceso de interfaz de usuario en onPostExecute()

Desde el href="http://developer.android.com/reference/android/os/AsyncTask.html" rel="nofollow"> AsyncTask documentación

  

AsyncTask permite el uso adecuado y fácil del hilo de interfaz de usuario. Esta clase permite realizar operaciones en segundo plano y publicar los resultados sobre el hilo de interfaz de usuario sin tener que manipular hilos y / o manipuladores.

3.He sugerimos que tenga una lectura en la documentación oficial de Administrador de energía que da una buena introducción al concepto WakeLock.

Otros consejos

  1. Por lo general el único código que se ejecute mientras el teléfono está durmiendo es un BroadcastReceiver. En realidad, el teléfono se despierta por un segundo, se ejecuta el código y duerme del BroadcastReceiver nuevo. Dado que nunca se debe ejecutar código largo en un BroadcastReceiver (utilizarlo para poner en marcha una vez Service), básicamente se puede asumir que el código no se ejecuta mientras el teléfono está durmiendo. Por supuesto, si usted está usando un BroadcastReceiver para iniciar un Service, por lo general debe obtener una WakeLock.

  2. Con una AsyncTask iniciado por el usuario, que realmente no necesita preocuparse por WakeLocks. Es poco probable que el teléfono va a dormir mientras se está ejecutando. No estoy seguro de si consiguen un WakeLock, pero poner mi teléfono a dormir durante la ejecución no parece un AsyncTask estándar para interrumpir la misma.

  3. Como Sted dijo, mira esto: http: // desarrollador .android.com / referencia / android / os / PowerManager.html

Básicamente, la única vez que usted tiene que preocuparse acerca WakeLocks es cuando se espera que sea su tarea de ser interrumpido por durmiendo (como es el caso si se establece una alarma que despierta el teléfono brevemente) o si usted absolutamente no puede tener la tarea interrumpido. De lo contrario, sólo asegúrese de que usted maneja con gracia interrupciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top