Actividad SingleTask, pero abierta a través de dos aplicaciones diferentes

Esta imagen fue muy útil para comprender la funcionalidad que ofrece el launhmode singleTask , tomada desde aquí

Introduzca aquí la descripción de la imagen Sin embargo, entendí esto en el caso de la misma aplicación, estoy teniendo problemas de entender lo que si ambas tareas pertenecen a dos aplicaciones diferentes

Escenario confuso (ficticio),

  • Estaba pasando por una aplicación y la aplicación ofrecía una acción para enviar correos electrónicos, seleccioné la opción de ' enviar correo electrónico '.
  • Se seleccionará la aplicación de correo electrónico predeterminada de mi teléfono y se abrirá su actividad (que se declarará como una sola tarea).
  • Mientras estaba escribiendo mi contenido de correo electrónico, cambié a alguna aplicación de chat y la aplicación se estrelló y me ofreció una opción para informar un problema a través de correo electrónico para el desarrollador, ahora, cuando selecciono " Informe ", mi aplicación de correo electrónico (que es el Misma aplicación de correo electrónico predeterminada).

  • Ahora, como la actividad raíz de la aplicación de correo electrónico es singletask, ¿mi contenido que he escrito será visible para mí?

Lo principal es que esta vez, las tareas / pilas pertenecen a dos aplicaciones diferentes.

Aunque está utilizando 2 aplicaciones diferentes, funcionará de la manera esperada :

  • Si su actividad singleTask ya existe, esa copia se utilizará, con el método onNewIntent() siendo llamado
  • Si no existe, se lanzará según lo normal

Más técnicamente, la reproducción de la definición de su enlace:

El sistema crea una nueva tarea e instancia la actividad en la raíz de la nueva tarea. Sin embargo, si ya existe una instancia de la actividad en una tarea separada, el sistema direcciona la intención a la instancia existente a través de una llamada a su método onNewIntent (), en lugar de crear una nueva instancia. Sólo puede existir una instancia de la actividad a la vez.


Esto se puede verificar fácilmente al convertir una actividad en un objetivo para compartir texto y singleTask en el manifiesto:

  <activity android:name=".MainActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> </activity> 

Ahora agregue un poco de registro a los onCreate() y onNewIntent() y realice algunas pruebas de escenarios.


Algo que me pareció especialmente útil al probar los diversos launchmodes es el siguiente comando ADB:

  • adb dumpsys activity activities

Esto genera una gran cantidad de texto (puede ayudar a reiniciar el teléfono antes de hacer esto – adb reboot ) mostrando detalles de las pilas de tareas de actividad. Esto se puede utilizar para mostrarle que su actividad singleTask se "rehomes" a medida que se lanza a través de diferentes aplicaciones.


En cuanto a la pregunta sobre los mensajes de correo electrónico, creo que dependerá de qué cliente de correo electrónico que está utilizando, pero espero que manejar el método onNewIntent() correctamente y guardar el borrador actual antes de mostrar su nuevo correo electrónico.

  • ¿Cómo solucionar la verificación fallida con zipalign?
  • Acerca de android launchmode "singleTask"
  • Android Lanzamiento o presentación de otra aplicación a través de Intent
  • Android - iniciar una actividad de otra aplicación para obtener su resultado
  • No se puede iniciar eclipse desde adt bundle en ubuntu 12.04
  • Cómo especificar una imagen de lanzamiento para la aplicación de Android
  • Modo de inicio de actividad de Android y problema de enlace directo
  • ¿Cómo ejecutar o iniciar la aplicación dentro del fragmento de Android?
  • ¿Es posible detectar la salida de una aplicación?
  • ¿Cómo iniciar la aplicación Telegram desde mi propia aplicación Android?
  • Filtrar aplicaciones no lanzables al obtener todas las aplicaciones instaladas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.