2012-07-02 15 views
8

Encontré este comportamiento un tanto extraño mientras desarrollaba en Android y durante mi búsqueda en Google la única respuesta que pude encontrar fue que esto es por diseño y que no me debería importar .Bloqueando la pantalla del teléfono Android resultados en varios sucesos onPause/onResume

Mi aplicación obtiene datos de ubicación mientras está activo, y estaba a punto de implementar una forma de preservar la batería deteniendo las actualizaciones de ubicación cuando se llama al evento onPause, y luego reanudo la búsqueda cuando se llama al evento onResume.

Durante la depuración, noté este extraño comportamiento al bloquear el teléfono, onPause-> onResume se llama una tras otra tres o más veces y luego termina con un evento onStop. La única respuesta que pude encontrar fue: así es como funciona Android, no importa.

Supongo que tengo curiosidad, ¿alguien me puede explicar la necesidad de detener y reanudar una simple subactividad varias veces? ¿Eso no consume más batería, especialmente para actividades más grandes que tienen un código serio en ReResume? ¿Hay alguna manera de evitar que esto suceda? Me gustaría saber que al menos mi código en esos eventos no se llama, quizás con un bloque if {} que evita ciclos de CPU innecesarios.

¡Cualquier idea es muy apreciada!

Respuesta

1

Tiene que registrar el receptor de difusión para manejar los eventos "Screen Time Out" y "Screen Lock".

Usted acaba de detener la recuperación de sus datos. código de la muestra:

public class ScreenReceiver extends BroadcastReceiver {  

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
       //screen locked, do here 
      } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
       //screen unlocked, do something here 
      } 
     } 

} 

Usted necesita registro receptor de radiodifusión para esta clase ScreenReceiver a la androidMenifest.xml

+0

Gracias, eso probablemente sea suficiente. De hecho, estaba buscando más detalles sobre por qué sucede esto, pero probablemente estoy pidiendo demasiado. – r41n

0

Hace poco me encontré con el mismo problema y fue capaz de evitar que suceda al jugar con los cambios de configuración para la actividad en el archivo de manifiesto. Creo que cuando un usuario bloquea un dispositivo, pueden suceder algunas cosas: la orientación puede cambiar, el tamaño de la pantalla puede cambiar (si desaparecen las barras de navegación o de notificación), etc., y esto hace que Android reconstruya todas las actividades & fragmentos. Terminé seleccionando muchas de las opciones en los cambios de configuración y dejó de invocar onResume después de onPause.

Cuestiones relacionadas