Reiniciar una actividad ya en ejecución

Aquí está el problema. Tengo una aplicación donde quiero presionar un botón, iniciar una nueva actividad que muestra una lista de elementos, permitir al usuario seleccionar cualquier número de elementos, haga clic en enviar y enviar esos datos a la actividad original que llamó a la nueva actividad con el lista de artículos. Aquí está la estructura básica:

Activity A -> Activity B (select items, press submit) -> [already running] Activity A (receive sent items) 

No tengo ningún problema en el envío de datos de ida y vuelta. El problema que tengo es que cuando intento reiniciar la actividad A, pasa a través del método onCreate() . Prefiero no hacer esto porque quiero poder configurar todo de antemano en el método onCreate() , y luego complementar lo que ya está ahí a través del método onRestart() . No estoy exactamente seguro de por qué el método onCreate() se llama cada vez que reinicio la actividad. Mi conjetura es la manera que yo llamo la actividad en la Actividad B:

 Intent intent = new Intent(this, PatientChartActivity.class); intent.putExtra("checked", checked); intent.putStringArrayListExtra("checked", checked); startActivity(intent); 

He estado buscando en el ciclo de vida de la actividad de Android y no estoy seguro de por qué no está regresando automáticamente a la actividad anterior, a menos que de hecho tenga que forzar hacerlo. Una cosa que estoy seguro es de que la actividad que se está ejecutando no está siendo destruida. Puse en un Log.v(TAG, "DESTROY") mensaje de registro en el método onDestroy() asegurando que no destruye la actividad. He intentado usar diversos indicadores cuando comienzo la actividad para decirle al sistema que quiero restaurar una actividad previamente comenzada, pero ésos no parecen trabajar tampoco. Puedo interpretarlos mal. He investigado exstensiveley sobre el tema, pero ninguna de las soluciones que he encontrado han ayudado. Aquí hay un problema que encontré que parece ser idéntica a la mía, pero no parecía resolver lo que estaba buscando. También miré los siguientes enlaces para otras rutas posibles de evitar el problema, pero no funcionó.

http://www.droidnova.com/use-intents-to-start-other-activities,76.html

http://www.warriorpoint.com/blog/2009/05/24/android-how-to-switch-between-activities/

Lo que realmente se hace de acuerdo a las cosas que ha declarado (Actividad A -> Actividad B (seleccionar elementos, presionar enviar) -> [ya está en ejecución] Actividad A (recibir elementos enviados) ") es:

Actividad A = nueva instancia -> ir a la actividad B = nueva instancia -> ir a la actividad A de nuevo = nueva instancia

Por lo tanto, su actividad "pila" es en realidad dos instancias de actividad A y una de actividad B. Es por eso que su segunda llamada en la actividad A lo inicializa y llama a 'onCreate ()' de nuevo. Una de las soluciones al problema, y ​​probablemente la mejor es:

De la actividad A comienza la actividad B con este método: 'startActivityForResult ()'. A continuación, en la actividad B, a pesar de comenzar la actividad A como lo hace actualmente, trate de establecer un resultado en la actividad A a través de esta función: 'setResult (int resultCode, Intent data)' y luego llamar 'finish () Un implementar el método 'onActivityResult ()'.

Ahora explicaré cómo el ciclo de vida de la aplicación:

  • la actividad A se inicializa y comienza la actividad B esperando un resultado con el fin de hacer "algo" con él. Hasta aquí todo bien.
  • la actividad B se inicializa y después de enviarla establece un resultado para la actividad A. Entonces se termina y automáticamente el resultado se pasa a la actividad anterior.
  • la actividad A vuelve a centrarse, YA INICIALIZADO y se invoca el método 'onActivityResult ()'. La "intención" que se estableció en la actividad B y ahora se pasa en la actividad B.

Dime si eso ayuda y si necesitas algún código de ejemplo.

En lugar de

 startActivity(intent); 

en su actividad A, utilice

 startActivityForResult(intent); 

De esta manera obtendrá un resultado cuando se realice esa actividad en particular. Anule esto en la Actividad A:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //TODO handle here. } 

Cuando la actividad B está terminada, llame a this.finish (). A continuación, volverá a la actividad A, y llamará al método anterior, lo que significa que su onCreate en la actividad A no será llamado.

  • Fragmento no invoca onSaveInstanceState al pasar ViewPager?
  • NavUtils.navigateUpTo () no inician ninguna Actividad
  • DialogFrag # show () de un lanzamiento de fragmentos "IllegalStateException: no se puede realizar esta acción después onSaveInstanceState"
  • Diferencia entre onPause y onStop ()
  • Diferencia entre onResume () y onResumeFragments ()
  • Actividad ciclo de vida: ¿Por qué se establece en "Pausado" y no "Detenido"
  • Android: Cuando se cancela un servicio, ¿cómo podemos persistir el estado del servicio para una restauración posterior?
  • Permiso de Marshmallow: Componente Lifecycle
  • La referencia del fragmento a la mActividad se convierte en nula después del cambio de orientación. Mantenimiento ineficaz del estado del fragmento
  • Escenario de Android donde ondestroy () se llama sin onpause () o onstop ()
  • Actividad y Fragmento Ciclos de Vida y Cambios de Orientación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.