2010-11-29 19 views
10

Hay algo que no entiendo muy bien en este momento.Android: onCreate() se llama varias veces (y no por mí)

Mi clase de actividad principal crea un servicio, que crea un nuevo hilo que espera una conexión TCP. Una vez que uno entra, se iniciará una nueva actividad:

Intent dialogIntent = new Intent(getBaseContext(), VoIPCall.class); 
dialogIntent.putExtra("inetAddress", clientSocket.getInetAddress()); 
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplication().startActivity(dialogIntent); 

Después de eso, el método de esa clase onCreate() se ejecute. Creará 2 hilos: uno registra y envía datos, el otro recibe y reproduce datos. Esos hilos tienen un ciclo para siempre.

Por alguna razón, observo que el onCreate() de esa última clase se vuelve a llamar, lo que hace que mi programa falle. No entiendo por qué se llama de nuevo ya que solo se están ejecutando los 2 subprocesos, no hay interacción del usuario. La documentación dice: "Se llama cuando la actividad se crea por primera vez". La actividad ya se está ejecutando y no estoy intentando crearla.

¿Podría alguien explicarme este comportamiento?

Respuesta

13

Android recreará su actividad después de ciertos "cambios en la configuración del dispositivo". Un ejemplo de esto es la orientación. Puede leer más aquí ... http://developer.android.com/guide/topics/resources/runtime-changes.html

Tal vez algo en sus hilos está haciendo algo que se considera un cambio de configuración?

Si ese es el caso, puede que le resulte útil ampliar la clase Application en su lugar y realizar su inicialización allí. Ver este post ... Activity restart on rotation Android

HTH

+0

¡Muchas gracias! – James

+0

La cantidad de tiempo que me salvaste de golpear mi cabeza contra la pared ... –

0

Esto me pasó una vez cuando utilicé "No guardar las acciones" en la sección de la aplicación de las opciones de desarrollador. Asegúrate de haber apagado esto.

3

Estaba experimentando una actividad llamada dos veces en algunos dispositivos Samsung. Lo resolví agregando android: launchMode = "singleInstance" en la etiqueta Activity en Manifest. Espero que esto pueda ayudar.

0

He observado este problema cuando intenta iniciar una actividad con valores en el intento.

A continuación se muestra un ejemplo en el Activity_A llama Activity_B y pasa los valores de la intención de ser recogidos en Activity_B:

Intent intent = new Intent(this, activityB.class); 
intent.putExtra("val1", someValue1); 
intent.putExtra("val2", someValue2); 
intent.putExtra("val3", someValue3); 
this.StartActivity(intent); 

En este caso, se puede establecer el android:launchModel="singleInstance" o android:launchModel="singleTop" en su AndroidManifest.xml y se Activity_B solo lanzar una vez Espero que esto ayude.

Cuestiones relacionadas