2010-11-23 16 views
7

Soy nuevo en la noción de WakeLock y necesito su ayuda.Preguntas para principiantes: Wakelocks

Preguntas:

  1. que asumen WakeLock que haber algún tipo de bloqueo que cuando se mantiene por el código que se ejecuta evita que el dispositivo de dormir. ¿Qué ocurre si el dispositivo ya está en modo de suspensión/espera? ¿Se ejecutará el código? ¿Asumiendo que nunca adquiriría un WakeLock?

  2. Cuando se realiza una tarea de larga duración (abt 7-8 segundos) en un hilo de fondo (AsyncTask) ¿debería molestarme en sostener un WakeLock? ¿AsyncTask ya lo adquiere para mí?

  3. se agradecen los enlaces a documentaciones oficiales y reseñas sobre wakelocks.

Thanks.

+0

También me gustaría saber esto. Específicamente, ¿bajo exactamente qué condiciones se va a dormir el teléfono? Si comienzo una actividad continua (cargando un archivo en mi caso) cuando el teléfono está encendido, ¿hay alguna posibilidad de que el teléfono se quede dormido mientras mi proceso está funcionando? – Timmmm

Respuesta

4

1.Si el teléfono está en modo de suspensión completa, además de una llamada de teléfono entrante, podría utilizar un intento de AlarmManager para activar el teléfono.

De la documentación AlarmManager clase:

El Alarm Manager mantiene un CPU estela bloqueo, siempre y cuando el método del receptor de alarma OnReceive() se ejecuta. Este garantiza que el teléfono no va a dormir hasta que haya terminado de manejar la transmisión. Una vez que onReceive() regresa, el Administrador de alarmas libera este bloqueo de activación. Esto significa que el teléfono dormirá en algunos casos tan pronto como a medida que finalice su método onReceive(). Si su receptor de alarma llamó a Context.startService(), es posible que el teléfono se apagará antes de que se inicie el servicio solicitado . Para evitar esto, su BroadcastReceiver y el Servicio necesitarán implementar una política de activación de activación separada para asegurar que el teléfono continúe ejecutándose hasta que el servicio esté disponible.

2. Si usted está trabajando con un AsyncTask, tendrá que publicar los resultados con el subproceso de interfaz de usuario en onPostExecute()

De la documentación AsyncTask:

AsyncTask permite adecuada y fácil uso del hilo de UI Esta clase permite realizar operaciones en segundo plano y publicar resultados en el subproceso UI sin tener que manipular subprocesos y/o controladores.

3.Le sugiero que lea en la documentación oficial de Power Manager que da una buena introducción al concepto de WakeLock.

3
  1. Normalmente, 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, ejecuta el código BroadcastReceiver y duerme nuevamente. Dado que nunca debe ejecutar código largo en un BroadcastReceiver (úsela para ejecutar un Service en su lugar), puede suponer que su código nunca se ejecuta mientras el teléfono está inactivo. Por supuesto, si está utilizando un BroadcastReceiver para iniciar un Service, generalmente debe obtener un WakeLock.

  2. Con un AsyncTask iniciado por el usuario, realmente no necesita preocuparse por WakeLocks. Es poco probable que el teléfono duerma mientras se está ejecutando. No estoy seguro si reciben un WakeLock, pero poner mi teléfono a dormir mientras ejecuta un estándar AsyncTask no parece interrumpirlo.

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

Básicamente, la única vez que usted tiene que preocuparse por WakeLocks es cuando ya sea esperar que su tarea sea interrumpido por el sueño (como es el caso si configure una alarma que active brevemente el teléfono) o, si no lo hace, no puede interrumpir la tarea. De lo contrario, solo asegúrate de manejar con gracia cualquier interrupción.

+0

Mi prueba ha demostrado que puede usar una alarma para activar un servicio, por lo que no necesita el receptor de difusión en absoluto. Alguien por favor corrígeme si me equivoco al respecto (quizás solo funcione en algunas versiones del sistema operativo). Mientras tanto, consulte https://github.com/commonsguy/cwac-wakeful#readme para ver una discusión sobre los servicios que mantienen el dispositivo en funcionamiento hasta que completen su tarea. –