2010-11-10 22 views
19

Cuando presiono el botón de reposo en mi Droid, se llama a mi actividad oncreate. ¿Por qué está sucediendo eso? ¿Por qué el sistema operativo desea llamar a OnCreate cuando el dispositivo se va a dormir? ¿Hay alguna manera de detenerlo, o al menos saber que es porque el teléfono se puso a dormir?Actividad OnCreate llamada cuando el teléfono se va a dormir

+1

¿Seguro que su aplicación no se está reiniciando debido a un cambio de orientación? –

+0

No lo es. Sucede con el teléfono sentado perfectamente quieto en mi escritorio. Cuando presiono el botón de reposo, se llama a ontroyy, de alguna manera se está iniciando una nueva actividad. – iterator

+0

Debo señalar que está pasando my validInstanceState válido al relanzar. – iterator

Respuesta

22

Esto ocurre particularmente para actividades que están bloqueadas en rotación, p. tener esto en el manifiesto dentro de las etiquetas de actividad:

android:screenOrientation="portrait" 

Al apagar la pantalla, que lee el acelerómetro para determinar la verdadera orientación y cambios a que antes de apagarse.

Así que sí, la solución simple es la adición de configChanges así, haciendo que se vea algo como esto:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="landscape" 
    android:configChanges="orientation" 
/> 

No es necesario indicar el screenOrientation, pero si no lo hace cualquiera que sea la orientación es en el momento en que comienza es donde permanecerá, a menos que escriba código para manejar los cambios de configuración.

Como nota al margen, cuando comencé a probar mis aplicaciones en ICS tuve que manejar algunos caprichos con un ciclo crear/destruir/crear al comienzo de algunas actividades. Se necesitan algunos controles y equilibrios adicionales para hacer que el código sea universal.

+0

¿Tiene más información sobre cómo funciona esto en ICS? Estaba experimentando este problema en dispositivos con 2.3.3 y 4.0.4. Su solución funciona en mi dispositivo 2.3.3, pero aún se llama a onCreate() después de dormir en mi 4.0.4. –

+0

El problema podría ser que el dispositivo tiene una orientación rígida para la pantalla de bloqueo. Para probar esto, haga que su orientación bloqueada sea la opuesta (retrato probable). Eso podría hacer que el extra de onCreate desaparezca, y le dará un punto de partida para descubrir cómo tragarse el cambio de orientación irrelevante. – ProjectJourneyman

+8

Gracias. Usted tenía razón. Encontré una solución al agregar screenSize a configChanges como este 'android: configChanges =" orientation | screenSize "'. De los documentos: "Nota: si su aplicación se dirige al nivel API 13 o superior (según lo declarado por los atributos minSdkVersion y targetSdkVersion), también debe declarar la configuración de" tamaño de pantalla ", porque también cambia cuando un dispositivo cambia entre vertical y horizontal orientaciones ". –

8

que tenían el mismo problema resuelto mi aplicación (juego) vuelve a cargar cada vez que vienen de sueño

aquí lo que hice para resolverlo

i añadir

<activity 
    android:configChanges="orientation|screenSize" 
/> 

esperanza de que esto ayude a alguien!

+0

Esto funcionó para mí. Gracias – RJB

Cuestiones relacionadas