Android marshmallow changement d'autorisation dynamique tue tous les processus d'application

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

Procédure: allez dans Paramètres - > Applications Sélectionnez application et autorisations. Désactivez l'une des autorisations. Dispositif: Nexus 6 appareil fonctionnant sous Android Marshmallow 6.0

Quand j'ai démarré l'application à partir du lanceur, il a commencé l'activité qui était au-dessus avant que l'autorisation de cette application ne soit modifiée. C'est un comportement différent de quand nous tuons le processus d'application en faisant glisser l'application à partir du 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 changé d'autorisation, elle ne peut pas dépendre de l'activité du lanceur à démarrer.

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?

24
demandé sur user802467 2015-11-03 02:00:29

2 réponses

C'est-à-dire que, pour que l'application fonctionne correctement lorsqu'elle est lancée après avoir changé d'autorisation, elle ne peut pas dépendre de l'activité du lanceur à démarrer.

C'est le cas depuis des années. Par exemple, si votre processus est terminé en raison de conditions de mémoire faibles, mais que l'utilisateur y a été récemment (par exemple, au cours de la dernière demi-heure), lorsque l'utilisateur visite l'écran de présentation (ce que vous appelez le "menu multi-tâches de L'interface utilisateur") et retourne à votre application, le contrôle reviendra à un nouvelle instance de l'activité dans laquelle l'utilisateur avait été en dernier (c'est-à-dire qu'il avait été en haut de la pile arrière).

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

Oui. Il est également prévu un comportement dans tous les appareils Android précédents, pour les autres cas où votre processus a été terminé, mais votre tâche est toujours en suspens et récente.

Pourquoi y a-t-il une différence de comportement par rapport au moment où le processus de demande est tué par glisser à partir du menu multitâche de L'interface utilisateur?

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

15
répondu CommonsWare 2015-11-02 23:05:21

Je suppose que la raison du meurtre est la suivante. C'est à propos de la 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 par rapport à cela, car entre les moments "check" et "use", il peut encore arriver un revoke.

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

  3. Pour tuer l'application, s'assurer que la prochaine fois qu'il démarre, il devrait réaliser que l'autorisation a été révoquée.

2
répondu beefeather 2016-02-02 00:11:20