2011-02-15 11 views
11

¿Hay alguna noción de etapas/niveles para dormir en Android?Android: etapas/niveles de suspensión en un dispositivo Android?

Al navegar por las listas de correo, soy consciente de que existe una etapa llamada "Sueño profundo". ¿La ejecución de todas las aplicaciones se detiene cuando el dispositivo alcanza este estado? Si es así, además de que el usuario presione el botón de encendido, ¿qué otra cosa podría reactivar el dispositivo?

Respuesta

20

Al navegar por las listas de correo, soy consciente de que existe una etapa llamada "Sueño profundo".

No existe realmente una etapa independiente llamada "sueño profundo". Solo hay "despierto", "dormido" y "apagado".

¿La ejecución de todas las aplicaciones se detiene cuando el dispositivo alcanza este estado?

La ejecución de todos los procesos cesa cuando el dispositivo se pone en reposo o se apaga.

Si es así, además de presionar el botón de encendido, ¿qué otra cosa podría reactivar el dispositivo?

  • Una alarma de AlarmManager
  • Una llamada telefónica entrante
  • un mensaje de texto entrante
  • Si usted tiene un socket abierto en datos inalámbrica (no WiFi), un paquete entrante en ese socket

Esas son las grandes. Puede haber otros.

+0

¿Sabrá si hay una forma de recibir una notificación cuando el dispositivo entra en alguno de estos 3 estados? – zer0stimulus

+3

@ zer0stimulus: No realmente. Es difícil decirle que la CPU está apagada para el modo de suspensión, porque la CPU está apagada para el modo de suspensión. Del mismo modo, es difícil decirle que el dispositivo está apagado porque el dispositivo está apagado. Hay algunos 'Intents' de difusión que están relacionados de alguna manera con estos estados (por ejemplo,' ACTION_SCREEN_OFF'), pero eso es todo. – CommonsWare

+1

¿cuánto tiempo permanecerá el dispositivo despierto? ¿Deberíamos adquirir un bloqueo de activación inmediatamente después de leer desde el socket para procesar el mensaje? – Erdal

4

me he dado cuenta el siguiente comportamiento:

  1. Usted tiene su actividad abierta y dejar de interactuar con ella
  2. Después de unos segundos (depende de cómo se haya configurado el dispositivo) se hace la pantalla apagado.

    Cuando se apaga la pantalla, se llaman onSaveInstance y .

  3. unos segundos más tarde (por lo general ~ 15s) el dispositivo entra en modo de reposo (es este el nombre correcto?)

    Cuando esto sucede, los siguientes métodos son invocados: onStop (llamando isFinishing vuelve falsa), onRetainNonConfigurationInstance y onDestroy.

    Hasta ahora todo bien. Ahora, el extraño comportamiento comienza: justo después de que finalice el último onDestroy, se crea otra actividad: onCreate, onStart, onRestoreInstanceState, onResume y finalmente .

    No encuentro ninguna razón para este extraño comportamiento. ¿Por qué se crearía otra actividad solo para ir directamente al modo de pausa?Esto sucede inmediatamente después de onDestroy de la actividad original!

Esto fue probado en el Galaxy S. No he probado lo que sucede después de unas horas sin actividad. No estoy seguro si algo más sucederá.

Espero que esto te ayude.

1

Una breve adición a la lista de Commonsware. Después de buscar una forma de ejecutar métodos periódicamente mientras el teléfono está dormido, descubrí que TimerTask funciona durante el modo de suspensión.

TimerTask es, en mi experiencia, más fáciles de trabajar si lo que quieres es ejecutar los métodos de un servicio y no para iniciar una actividad.

+2

Es curioso, porque al final de http://groups.google.com/group/android-developers/browse_thread/thread/9e2878053a422718 Mark Murphy afirma específicamente que 'TimerTask'" no impide que el dispositivo se quede dormido y no lo hace despierta el dispositivo de nuevo ". –

0

Además de los estados "despierto", "dormido" y "apagado" que se menciona en @CommonsWare, existe la distinción entre si la CPU está dormida o solo la pantalla. Por ejemplo, el official docs here describe de esta manera:

Para evitar que se agote la batería, un dispositivo Android que se deja inactivo rápidamente se duerme. Sin embargo, hay ocasiones en que una aplicación necesita activar la pantalla o la CPU y mantenerla despierta para completar el trabajo . [énfasis añadido]

En el marco de tres etapas descrito por CommonsWare, un dispositivo cuya pantalla es oscura probablemente no esté categorizada como "dormida" a menos que la CPU también esté detenida. Pero como lo implica el párrafo anterior, el estado de pantalla oscura puede referirse legítimamente como "dormido". Sin duda, esta es la razón por la que las personas se refieren al "sueño profundo" para aclarar que están hablando de que la CPU está dormida.

This doc page menciona también

Cuando un dispositivo Android se deja inactivo, primero tenue, a continuación, apague la pantalla, y en última instancia apague la CPU. Esto evita que la batería del dispositivo se agote rápidamente.

Así que si quieres estar incompleta, podría agregar "dim" a la lista de "las fases del sueño/niveles":

  1. despierto
  2. tenue pantalla
  3. fuera
  4. CPU fuera (verdadero "sueño" o "sueño profundo")
  5. alimentación

Aparentemente, la transición de 2 a 3 a 4 es bastante rápida cuando se produce el tiempo de espera inactivo. Pero hay otros momentos en que la pantalla puede estar apagada sin una transición a un sueño profundo; p.ej. al reproducir audio (al menos en ciertas aplicaciones).

Ojalá pudiera decirle cómo predecir cuándo el dispositivo pasará de la pantalla apagada a la CPU desactivada, p. cuánto tiempo es el tiempo de espera, pero no he encontrado esa información. Lo que he encontrado es FLAG_KEEP_SCREEN_ON and WAKE_LOCK para evitar que ocurra una u otra.

P.S. Si quieres ser exhaustiva, se podía contar daydream en su lista de "las fases del sueño":

Daydream es un nuevo [a partir de Android 4.2] modo de protector de pantalla interactiva para dispositivos Android. Se se activa automáticamente cuando el dispositivo se inserta en una base dock o cuando el dispositivo se deja inactivo mientras está enchufado a un cargador (en lugar de apagando la pantalla).

Desde el punto de vista de la aplicación que se ejecutaba anteriormente, suena como que Daydream se comporta como cambiar a una aplicación diferente. Por lo tanto, no es realmente una cuestión de que el dispositivo duerma, aunque su actividad se para, supongo.

+0

no esa pregunta es diferente de mi escenario. –

+0

Sí lo entendí, quizás me olvidé de eso. –

Cuestiones relacionadas