2012-07-05 14 views
7

Tengo una actividad llamada HomeActivity que tiene un SurfaceView y muestra una imagen de vista previa de la cámara. Esta actividad es muy pesada y se siente lenta si la comienzas/reinicias.onCreate siempre se llama si navega hacia atrás con intención

Así que investigué y descubrí que de alguna manera siempre se llama al método onCreate. En mi opinión, esto no debería suceder si la Actividad ya se ha iniciado.

documentation dice: Se invoca cuando se crea la actividad por primera vez. Aquí es donde debes hacer toda tu configuración estática normal: crear vistas, vincular datos a listas, etc. Este método también te proporciona un paquete que contiene el estado previamente congelado de la actividad, si es que existía. Siempre seguido de onStart().

Aquí es el método, que se encarga de volver:

protected void gotoHome() { 
    final Intent intent = new Intent(SomeOtherActivity.this, HomeActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
} 

Editar:

aquí es cómo estoy dejando HomeActivity ... nada especial:

final Intent i = new Intent(HomeActivity.this, SomeOtherActivity.class); 
startActivity(i); 
+0

Asegúrate de no terminar() HomeActivity cuando empieces otra actividad desde él. – Egor

+0

onCreat() llama cuando regresa con el método 'gotoHome()'? –

+0

@Egor No llamo finish() – Mark

Respuesta

14

Sí, cuando Si desea volver a la función HomeActivity, debe utilizar estos indicadores:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 

Aquí está la sección correspondiente de la documentación sobre Intent.FLAG_ACTIVITY_CLEAR_TOP:

La instancia actualmente en ejecución de la actividad B en el ejemplo anterior ya sea recibir el nuevo intento usted está comenzando aquí en su onNewIntent methodwillmuch() , o se terminará y se reiniciará con el nuevo intento . Si ha declarado que su modo de lanzamiento es "múltiple" (el predeterminado ) y no ha configurado FLAG_ACTIVITY_SINGLE_TOP en el mismo intento , entonces se terminará y se volverá a crear; para todos los demás modos de inicio o si se establece FLAG_ACTIVITY_SINGLE_TOP, este Intent será entregado a la instancia actual onNewIntent().

+0

¡Muchas gracias! Facepalm ... podría tener esta idea! – Mark

+0

A veces me sorprende lo rápido que puede obtener una respuesta útil por aquí ;-) Me alegro de ser de ayuda. –

+0

Hola David, se llama a mi actividad cada vez que regreso de su actividad infantil. ¿Pueden ayudarme? –

Cuestiones relacionadas