El cambio de permisos dinámico de Android marshmallow mata todos los procesos de aplicación


Observación: Cambiar manualmente el permiso de la aplicación Android mató a todos los procesos de esta aplicación.

Procedimiento: Vaya a Configuración->Aplicaciones Seleccione aplicación y permisos. Deshabilite uno de los permisos. Dispositivo: Nexus 6 dispositivo con Android Marshmallow 6.0

Cuando inicié la aplicación desde el lanzador, comenzó la actividad que estaba en la parte superior antes de que se cambiara el permiso de esta aplicación. Ese es un comportamiento diferente de cuando matamos a la proceso de solicitud deslizando la aplicación desde el menú multi-tarea de la interfaz de usuario. En ese caso, la actividad del lanzador se crea primero. Es decir, para que la aplicación funcione correctamente cuando se inicia después de cambiar el permiso, no puede tener una dependencia de la actividad del lanzador que se iniciará.

¿Se espera este comportamiento con permisos dinámicos en todos los dispositivos Android 6.0+? ¿Por qué hay una diferencia en el comportamiento de cuando el proceso de aplicación se elimina deslizando desde el menú multitarea de la interfaz de usuario?

Author: user802467, 2015-11-03

2 answers

Es decir, para que la aplicación funcione correctamente cuando se inicia después de cambiar el permiso, no puede tener una dependencia de la actividad del lanzador que se iniciará.

Ese ha sido el caso durante años. Por ejemplo, si su proceso se termina debido a condiciones de memoria bajas, pero el usuario ha estado en él recientemente (digamos, dentro de la última media hora), cuando el usuario visite la pantalla de vista general (lo que llama el "menú multitarea de interfaz de usuario") y vaya a regresar a su aplicación, control nueva instancia de cualquier actividad que el usuario había estado en el último (es decir, había estado en la parte superior de la pila POSTERIOR).

¿Se espera este comportamiento con permisos dinámicos en todos los dispositivos Android 6.0+?

Sí. También se espera el comportamiento en todos los dispositivos Android anteriores, para otros casos en los que el proceso se terminó, pero su tarea sigue pendiente y reciente.

¿Por qué hay una diferencia en el comportamiento de cuando el proceso de solicitud es asesinado por ¿deslizándolo desde el menú multitarea de la interfaz de usuario?

Deslizar una tarea fuera de la pantalla vista general elimina esa tarea. Por lo tanto, esa tarea no se puede reutilizar cuando el usuario intenta volver a su aplicación (por ejemplo, a través de un icono de lanzador de pantalla de inicio).

 15
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-02 23:05:21

Supongo que la razón del asesinato es la siguiente. Se trata de concurrencia. El sistema puede elegir uno de los 3 enfoques posibles:

  1. Revocar un permiso silenciosamente. La aplicación no tiene forma de verificar esto, porque entre cualquier momento de 'check ' y' use ' todavía puede ocurrir una revocación.

  2. Para notificar A la aplicación. Este tipo de notificación debe ser reconocida por la aplicación, lo que significa que no su hilo va a acceder a la API deshabilitada más y el el sistema puede desactivar la API ahora. Esto es elegante, pero es difícil de programar para programadores inexpertos.

  3. Para eliminar la aplicación, asegúrese de que la próxima vez que se inicie se dará cuenta correctamente de que el permiso fue revocado.

 2
Author: beefeather,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-02 00:11:20