web-dev-qa-db-fra.com

Android La modification dynamique des autorisations Marshmallow tue tous les processus d'application

Observation: l'autorisation de modification manuelle de Android a tué tous les processus pour cette application.

Procédure: Accédez à Paramètres-> Applications Sélectionnez l'application et les autorisations. Désactivez l'une des autorisations. Appareil: appareil Nexus 6 exécutant Android Marshmallow 6.0

Lorsque j'ai démarré l'application à partir du lanceur, elle a démarré l'activité qui était en haut avant que l'autorisation de cette application ne soit modifiée. Il s'agit d'un comportement différent de lorsque nous supprimons le processus de demande en faisant glisser l'application depuis le menu multi-tâches de l'interface utilisateur. Dans ce cas, l'activité du lanceur est créée en premier. Autrement dit, pour que l'application fonctionne correctement lorsqu'elle est lancée après avoir modifié l'autorisation, elle ne peut pas avoir de dépendance sur l'activité du lanceur pour être démarrée.

Ce comportement est-il attendu avec des autorisations dynamiques sur tous les appareils Android 6.0+? Pourquoi y a-t-il une différence de comportement par rapport au moment où le processus d'application est tué en le faisant glisser depuis le menu multitâche de l'interface utilisateur?

27
user802467

Autrement dit, pour que l'application fonctionne correctement lorsqu'elle est lancée après avoir modifié l'autorisation, elle ne peut pas avoir de dépendance sur l'activité du lanceur pour démarrer.

C'est le cas depuis des années. Par exemple, si votre processus est interrompu en raison de conditions de mémoire insuffisantes, mais que l'utilisateur y a été récemment (disons, au cours de la dernière demi-heure), lorsque l'utilisateur visite l'écran de présentation (ce que vous appelez le "UI multi-tâches" menu ") et revient à votre application, le contrôle reviendra à une nouvelle instance de la dernière activité de l'utilisateur (c.-à-d. qu'il se trouvait au sommet de la pile BACK).

Ce comportement est-il attendu avec des autorisations dynamiques sur tous les appareils Android 6.0+?

Oui. Il s'agit également d'un comportement attendu dans tous les appareils Android Android précédents), dans les autres cas où votre processus a été interrompu mais votre tâche est toujours en attente et récente.

Pourquoi y a-t-il une différence de comportement par rapport au moment où le processus d'application est tué en le faisant glisser depuis le menu multitâche de l'interface utilisateur?

Glisser une tâche hors de l'écran de vue d'ensemble supprime cette tâche. Par conséquent, cette tâche ne peut pas être réutilisée lorsque l'utilisateur essaie de revenir à votre application (par exemple, via une icône de lancement d'écran d'accueil).

15
CommonsWare

Je suppose que la justification du meurtre est la suivante. Il s'agit de simultanéité. Le système peut choisir l'une des 3 approches possibles:

  1. Pour révoquer une autorisation en silence. L'application n'a aucun moyen de vérifier cela, car entre tout moment de "vérification" et "d'utilisation", il peut toujours y avoir une révocation.

  2. Pour notifier l'application. Ce type de notification doit être reconnu par l'application, ce qui signifie que son thread ne va plus accéder à l'API désactivée et que le système peut désactiver l'API maintenant. C'est gracieux, mais difficile à programmer pour les programmeurs inexpérimentés.

  3. Pour tuer l'application, assurez-vous qu'au prochain démarrage, elle réalisera correctement que l'autorisation a été révoquée.

2
beefeather