2012-06-06 9 views
7

Supongamos que tenemos dos actividades.

A - actividad principal, que es "inicio en casa habilitado" (filtros de intención adecuados, etc.)

B - tarea de actividad raíz con especificación singleTask (solo puede haber una instancia de esta actividad) y con taskAffinity personalizado (para diferenciar si de la raíz principal de la tarea).¿Cómo eliminar la actividad de singleTask con taskAffinity de tareas recientes cuando termina?

Supongamos que B representa una tarea, que solo es válida cuando no está terminada; volver a ella o volver a empezar desde tareas recientes después de finalizarla no es una opción.

En algún punto del tiempo - A inicia B para comenzar una nueva tarea. El objetivo es eliminar B de la lista de tareas recientes cuando el usuario finaliza B. El usuario puede navegar de B a otras tareas (usando la tecla de inicio prolongado) y luego navegar de nuevo hasta B siempre que no haya terminado. Lanzar A desde el iniciador no pondrá a B en primer plano ya que tienen afinidades de tareas diferentes.

Android reconoce B como raíz de una tarea, por lo que B es visible en la lista de tareas recientes, incluso si está terminada, y el usuario siempre puede volver a ella. No es una solución mover B a la única tarea con A, porque en el momento en que B se está ejecutando, el usuario debería poder cambiar entre las tareas A y B. Agregar excludeFromRecents al manifiesto de B lo elimina completamente de la lista de tareas recientes, y también es una mala solución.

¿Cómo conseguirlo? (Lo siento por mi mala Inglés)

+0

Finalización de llamada() en onResume() cuando la tarea finaliza no es correcta? – pawelzieba

+0

Pero aún permanece en la lista de tareas recientes –

+0

@MichaelP ¿Desea que nunca aparezca en tareas recientes? ¿O simplemente desaparecer cuando haya terminado? –

Respuesta

3

respuesta estándar

Siento ser portador de malas noticias, pero esta funcionalidad no se puede lograr utilizando métodos estándar sin anulando la forma en que funciona su aplicación. Incluso entonces, solo funcionará mientras se ejecute tu aplicación. Además, si lo hace, necesitará un dispositivo rooteado con una ROM especializada porque de todos modos no puede anular la funcionalidad del botón Inicio. Todo lo que puede hacer es responder al onNewIntent() que no se dispara si hace mucho tiempo que presiona el botón Inicio.

Tareas recientes es específicamente para facilitar el uso al usuario para permitirle regresar a las aplicaciones que ha estado usando, independientemente de si la aplicación se está ejecutando. Sin embargo, hay buenas noticias. ¡Este proceso no mantiene viva tu aplicación! Es simplemente un icono que apunta a su paquete.

Desafortunadamente, esto significa que si su aplicación todavía se está ejecutando, está sucediendo algo más que la mantiene en funcionamiento.

respuesta no estándar

Puede ser posible mediante la edición de las propiedades del paquete durante el tiempo de ejecución (mucho de la misma manera que se puede habilitar/deshabilitar componentes de código Java). Esto es desalentador, porque Recent Tasks es una función de usabilidad de la plataforma central de Android. Esto requeriría un poco de investigación.

0

Un poco tarde, pero esto sigue apareciendo como el éxito principal en Google. Por favor, consulte this respuesta para una posible solución.

En su caso, usted tendrá que:

  • crear una nueva actividad llamada C ExitActivity, y añadir banderas se manifiestan como se describe en la otra respuesta.
  • Actividad B debe tener los siguientes atributos en el manifiesto: android:taskAffinity="com.example.ActivityB" android:allowTaskReparenting="true" android:launchMode="singleTask" android:documentLaunchMode="always"
  • establecer el atributo de afinidad de trabajo sobre C a ser el mismo que B
  • La llamada a Intent.addFlags en el ExitActivity sólo debe ser el último de tres: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
Cuestiones relacionadas