Preguntas para principiantes: Wakelocks
Pregunta
Soy nuevo a la noción de WakeLock y necesito su ayuda.
Preguntas:
-
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?
-
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í?
-
enlaces a la documentación oficial y valoración crítica de wakelocks son apreciadas.
Gracias.
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
-
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 delBroadcastReceiver
nuevo. Dado que nunca se debe ejecutar código largo en unBroadcastReceiver
(utilizarlo para poner en marcha una vezService
), básicamente se puede asumir que el código no se ejecuta mientras el teléfono está durmiendo. Por supuesto, si usted está usando unBroadcastReceiver
para iniciar unService
, por lo general debe obtener una WakeLock. -
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 unAsyncTask
estándar para interrumpir la misma. -
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.