¿Cómo abrir la actividad ya abierta en vez de crear una nueva?

Tengo dos actividades con el "menú de la navegación" que tiene artículos para lanzar Actividad1 y Actividad2. Por ejemplo, iniciamos Actividad2 de Actividad1 y luego queremos abrir Actividad1 tocando en "menú de navegación", pero cuando hacemos esto obtenemos una nueva instancia de Actividad1 en lugar de una instancia abierta. ¿Cómo puedo abrir la instancia de Activity1 si ya existe y crear una nueva instancia si no?

Añade FLAG_ACTIVITY_REORDER_TO_FRONT a tu Intent que usas con startActivity() .

Agrega android:launchMode="singleTop" a tu actividad en el Manifest.xml

 <activity android:name=".myActivity" android:label="@string/app_name" android:launchMode="singleTop" /> 

Compruebe esto sobre launchModes diferentes también importa esto:

Como se muestra en la tabla anterior, el estándar es el modo predeterminado y es apropiado para la mayoría de los tipos de actividades. SingleTop es también un modo de lanzamiento común y útil para muchos tipos de actividades. Los otros modos – singleTask y singleInstance – no son apropiados para la mayoría de las aplicaciones, ya que resultan en un modelo de interacción que es probable que no sea familiar para los usuarios y es muy diferente de la mayoría de las otras aplicaciones

Establezca el indicador de la actividad en singleTask y anule el onNewIntent(Intent intent) para capturar la nueva intención.

La respuesta más completa sería usar android:launchMode="singleTask" y dependiendo de su funcionalidad, anule onNewIntent ya que se llamará si ya hay una instancia de la Activity con el nuevo Intent pasado a él.

 <activity android:name=".MainActivity" android:launchMode="singleTask"/> 

¿Por qué?

Basado en la pregunta. Hay dos Actividades, Actividad1 y Actividad2

Abrimos Activity1 y luego de Activity1 abrimos Activity2 . Luego, dentro de Actividad2 :

¿Cómo puedo abrir la instancia de Activity1 si ya existe y crear una nueva instancia si no?

Como se indica en AndroidManifestActivity_launchMode para singleTask

Si, al iniciar la actividad, ya hay una tarea en ejecución que comienza con esta actividad, entonces en lugar de iniciar una nueva instancia, la tarea actual se lleva a la parte delantera. La instancia existente recibirá una llamada a Activity.onNewIntent () con la …

Además, bajo la clase de intención, si usted lee sobre el singleTask launchMode , ya utiliza Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT y establecer manualmente una intención para que no se establezca normalmente por código de aplicación.

Como se indica en FLAG_ACTIVITY_BROUGHT_TO_FRONT

Int FLAG_ACTIVITY_BROUGHT_TO_FRONT Este indicador no se establece normalmente mediante el código de la aplicación, sino que se establece para usted por el sistema tal como se describe en la documentación launchMode para el modo singleTask.

Por lo tanto, mediante singleTask launchMode se asegura de que sólo hay una instancia de su aplicación y no tiene que agregar el indicador FLAG_ACTIVITY_BROUGHT_TO_FRONT a sus intentos en cada actividad que llama a su Activity2 como lo sugiere CommonsWare .

Ahora, si usamos el android:launchMode="singleTop" como lo sugirió weakwire , el enlace que él mismo proporcionó indica claramente;

"SingleTop" … En otras circunstancias – por ejemplo, si una instancia existente de la actividad "singleTop" está en la tarea de destino, pero no en la parte superior de la pila o si está en la parte superior de una pila, pero no En la tarea de destino – se crearía una nueva instancia y se empujaría en la pila.

En otras palabras, terminaríamos con múltiples instancias de Activity1 en algunos escenarios, que es lo que no queremos.

Como última opinión, si usted es uno de los que aman las respuestas de edición que no contribuyen a nada a la respuesta en sí, ir responder a algunas preguntas reales si realmente desea aumentar su reputación de desbordamiento de pila.

  • Actividad flotante de Android con descartar en deslizar
  • La actividad no está asignada a Android.app.Activity Manifest XML
  • Propósito always null onStartCommand
  • Matar la aplicación android del administrador de tareas mata los servicios iniciados por la aplicación
  • ¿Cómo poner un retraso en la llamada de una actividad de otra actividad?
  • Envío de la actividad al fondo sin terminar
  • Android: haz algo en actividad cuando cambian las preferencias
  • ¿Cómo devolver un resultado (startActivityForResult) de una actividad TabHost?
  • ¿Cómo evitar múltiples instancias de la misma actividad?
  • El diálogo de progreso no se muestra en la función onActivityResult
  • Android: Mantenga MediaPlayer en ejecución durante la actualización de la orientación de la pantalla Actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.