2011-05-30 17 views
15

Tengo un problema. Cuando comienzo por primera vez mi aplicación de Android, en la actividad principal se llaman tanto onCreate como onResume. pero quiero que me llamen solo onCreate.Android onCreate onResume

¿Qué puedo hacer?

+2

elimine el onResume() si no lo desea.no afectará. – Kakey

+0

Marque esta respuesta puede ser útil: http://stackoverflow.com/a/8516056/265167 –

Respuesta

1

No puede hacer nada, ya que así es como funciona el ciclo de vida de la actividad.

Consulte http://developer.android.com/guide/topics/fundamentals/activities.html#Lifecycle para ver un diagrama que muestra el ciclo de vida.

+1

ok gracias ... por lo tanto, si se llama al onResume en cualquier momento, no hay forma de que la actividad se comporte de cierta manera en un primer acceso, y de otra manera cuando se llama de nuevo ... ¿estoy en lo cierto? – Alessio

+0

@Alessio Sí, observe el método 'onRestart()'. Ver la respuesta de @Fenix. –

1

Como puede ver en la API, el ciclo de vida de la actividad siempre llama a Reanudar antes de mostrar la actividad. http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Supongo que podría hacer un booleano global para un primer acceso y establecerlo en falso. A continuación, anule el onResume y verifique la variable. Si es falso, establézcalo en true y devuelva, si es verdadero, llame a super.onResume.

Debería funcionar, pero no sé si se puede manejar de forma más simple y no tengo acceso al SDK aquí para probarlo.

+0

¡Lo intentaré gracias! – Alessio

42

De acuerdo con los documentos SDK, lo que está viendo es el comportamiento previsto. Eche un vistazo al diagrama de flujo en los documentos para la Actividad - Activity Lifecycle.

Mediante programación, puede evitar esto manteniendo a un miembro de la instancia para rastrear si se ha llamado a onResume antes: la primera vez que se invoca, configure la variable y devuelva, por ejemplo,

private boolean resumeHasRun = false; 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (!resumeHasRun) { 
     resumeHasRun = true; 
     return; 
    } 
    // Normal case behavior follows 
} 
+0

Cuando intento hacer esto, recibo un "Suspended (exception RuntimeException)" cuando intento establecer resumeHasRun = true. ¿Algunas ideas? – proudgeekdad

+6

En lugar de esto, debe usar el método onRestart() de Activity, está destinado exactamente para ese caso de uso. –

+1

Siempre que su actividad se detenga ('onStopped()'), entonces @FenixVoltres es correcto, en eso, debe usar 'onRestart()'. –

12

La respuesta correcta es utilizar onRestart() método Activity 's. Esto es probablemente lo que has estado buscando.

+0

No necesariamente. 'onRestart()' se invoca solo si la actividad se detuvo. – anon

+0

Tiene razón, pero la respuesta a la pregunta anterior fue mover código de 'onResume()' (que también se llama cuando se crea actividad) a 'onRestart()', que no es, cuál fue el punto. –

+1

@bowmanb Correcto, pero sin conocer su intención, en la mayoría de los casos, 'onRestart()' es lo que querrías aquí. –

Cuestiones relacionadas