14

¿Cómo evitar que se vuelva a crear una actividad al apagar la pantalla?Evitar que se vuelva a crear la actividad de Android al apagar la pantalla

Lo que hago

  1. Start Bejewels e ir a la pantalla de la joyería.
  2. Presione el botón de encendido en breve. La pantalla está apagada, pero el dispositivo no.
  3. Presione el botón de encendido nuevamente.

Lo que veo

la misma pantalla que antes de apagar la pantalla.

En el caso de mi solicitud (trivial, sólo una aplicación Web con un solo WebView) el escenario es el siguiente:

Lo que hago

  1. empezar mi aplicación El método activity onCreate() carga una URL en WebView.
  2. Presione el botón de encendido en breve. La pantalla está apagada, pero el dispositivo no.
  3. Presione el botón de encendido nuevamente.

Lo que veo

La vista Web está recargando la página.

Lo que esperaba

Como en el caso Bejewels Quiero ver la misma pantalla, que para mi aplicación es la página en su estado anterior: secuencias de comandos se ejecutan, una forma campos son lleno etc.

Depuración mostró, que estaba equivocado (en una pregunta anterior) y OnDestroy() y onCreate() están siendo llamados uno por uno cuando la pantalla se acaba de encender. Y dado que todavía escucho una música, reproducida por un guión, cuando la pantalla está apagada, parece que tanto la actividad como el WebView existen hasta que presiono el botón de encendido nuevamente.

Lo que probé.

  1. android: alwaysRetainTaskState = "true" El mismo comportamiento.
  2. Lectura sobre los intentos (en vano, simplemente no entendí, cómo se aplican a mi situación).
  3. Usando PhoneGap. Se comporta de manera diferente: simplemente mata toda la aplicación al presionar el botón de encendido.Esto ES mejor, pero no el mejor.

Respuesta

1

complemento:

android:launchMode="singleTop" 

a la parte de actividad en el manifiesto XML. ver aquí http://developer.android.com/guide/topics/manifest/activity-element.html

+0

Nada ha cambiado. (No eliminé android: alwaysRetainTaskState = "true"). – noober

+0

después de presionar el botón de encendido para apagar la pantalla y luego de nuevo a la pantalla en el que se llama onResume(), ¿qué estás haciendo en onResume()? – Bush

+0

1. Sí, se llama onResume(). Lo he comprobado (anulado y llamado Tostada). 2. Perdón por ser tonto, simplemente no imaginé que tenía que hacer algo en onResume(). Por lo tanto, no fue anulado y ahora contiene solo la llamada Toast. 3. Comportamiento ahora es el siguiente: después de presionar el botón la primera vez, cuando la pantalla está apagada, la página se recarga en segundo plano (la música se detiene para reproducirse y luego se reproduce desde el inicio, hay una sección de javascript en carga de la página web que inicia la música jugando). – noober

28

La solución a este problema puede ser el mismo que el descrito aquí: onDestroy gets called each time the screen goes on

Parece que su actividad está siendo reiniciado debido a los cambios de configuración, ver http://developer.android.com/guide/topics/resources/runtime-changes.html . El más común es cuando su aplicación está en modo horizontal (como la mayoría de los juegos) y luego se activa el bloqueo de pantalla tocando el botón de encendido. El bloqueo de pantalla está en modo vertical y, por lo tanto, desencadena un cambio en la orientación que activa la actividad para reiniciarse.

Este comportamiento se puede anular mediante la adición:

android:configChanges="orientation|keyboardHidden" 

... a su archivo de manifiesto si se dirigen a nivel de la API de menos de 13. O

android:configChanges="orientation|keyboardHidden|screenSize" 

... si está el nivel de API de segmentación es superior a 13.

Tenga en cuenta que puede necesitar ir a project-> properties y actualizar su objetivo de compilación del proyecto. 'screenSize' no se reconocerá si su objetivo de compilación es menor que 13.

Puede haber un cambio de configuración diferente que esté causando que la actividad se restablezca. El siguiente enlace proporciona una lista de los posibles cambios de configuración: http://developer.android.com/guide/topics/manifest/activity-element.html#config

Cuestiones relacionadas