Configuración de Android AppWidget – Comienza en una nueva tarea
He buscado y buscado y buscado esto!
Así que tengo un widget de aplicación y tiene una actividad de configuración que puedo abrir al pulsar un botón en la aplicación. El escenario es:
- 17.8 MiB asignación de montón para un simple "Hello World" proyecto?
- ¿Cómo depurar Android ANR?
- Cómo controlar la pila trasera de Android
- Android: ¿Cuánta memoria utiliza mi aplicación?
- Android: Bitmaps, SoftReferences y OOMs?
Si la aplicación se abriera.
Cerró la aplicación con el botón de inicio.
Seleccionado para añadir mi widget
He configurado el widget.
Colocado en mi pantalla de inicio
A continuación, abra de nuevo la actividad de configuración con el botón del widget.
Cancelar la nueva configuración pulsando volver me volverá a poner en la aplicación.
Cuando presione hacia atrás quiero regresar a casa.
Básicamente lo que estoy pidiendo es. ¿Cómo inicio la actividad de configuración en su propia tarea / pila?
He mirado en los filtros de intención, pero yo no estoy muy seguro, o tal vez es algo que ver con el paquete que está en, o tal vez no es posible!
Supongo que puede tener algo que ver con la intención que utilizo para iniciar la actividad de configuración
Intent configIntent = new Intent(this, Configuration.class); configIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); remoteView.setOnClickPendingIntent(R.id.config, PendingIntent.getActivity(this, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT));
Tal vez porque lo inicie con 'this' como contexto, siempre se iniciará en mi pila de aplicaciones … pero la api de intención pendiente es: PendingIntent API 1 "Tenga en cuenta que la actividad se iniciará fuera del contexto de una actividad existente "
Así que sí voy a dejar de hablar ahora como acabo de ir en círculos!
EDITAR
Así que probado android:launchMode="singleInstance"
en el manifiesto como se dijo. Esto funcionó sin embargo detiene el comportamiento 'startActivityForResult' funcionando correctamente. (que es toda la razón de una actividad de configuración) Obtener el error:
WARN / ActivityManager (59): La actividad se está iniciando como una nueva tarea, cancelando así el resultado de la actividad.
Así que todavía no han encontrado una solución.
- Ciclo de vida de la clase de aplicaciones Android
- Obtenga el tamaño de RAM total que utiliza Aplicación en Android
- Diferenciar entre un inicio de actividad de la pantalla de inicio o de otra actividad de la aplicación
- Razones por las que mi aplicación Android se bloquea en mi teléfono de forma consistente, pero no en mi emulador
- La aplicación de Android se reinicia al cerrar / cerrar fuerza
- Restaurar la pila posterior de Android después de cerrar la aplicación
- Cómo borrar la pila de Android de las actividades?
- Notificación de Android - java.lang.Throwable: volcado de pila
Ok ordenado 🙂 necesario:
android:taskAffinity=""
en el manifiesto, establecer la afinidad de la tarea con una cadena vacía permite que la actividad se inicie en su propia pila, ya que no está "afiliada" al resto de la aplicación.
ACTUALIZAR
He cambiado la afinidad de la tarea a: android: taskAffinity = "com.my.package.alternative.task" ya que cada vez que lancé la actividad que estaba apareciendo varias veces en el "historial". Así que ahora comienza en su propia pila, pero se comparte con otras instancias de la misma actividad.
También necesitas agregar la Flag Intent.FLAG_ACTIVITY_NO_HISTORY
a tu intención 🙂 Esto detiene tu tiempo de obtención de su aplicación en la historia cuando se mantiene pulsado el botón de inicio.
ACTUALIZAR
He notado que FLAG_ACTIVITY_NO_HISTORY no estaba haciendo lo que quería, lo he eliminado y agregado:
android:excludeFromRecents="true"
en la etiqueta de actividad en el manifiesto también. La actividad ahora se comporta como yo quiero 🙂
Tengo esta respuesta del siguiente link trail: Tasks & Back Stack | Gestión de tareas | Etiqueta de afiliación
Trate de poner android: launchMode = "singleInstance" para una actividad de la aplicación en AndroidManifest.xml
- Gradle Sync Falló – Android Studio 2.3.1
- Configuración de la variable Cygwin Path para encontrar Android NDK