41 votes

La suppression automatique des tâches se produit-elle dans les versions modernes d'Android?

Selon le Android documentation, le système d'effacer une tâche (terminer toutes les Activités au-dessus de celle qui a lancé la tâche) qu'elle estime avoir été abandonnée par l'utilisateur:

https://developer.android.com/guide/components/tasks-and-back-stack.html#Clearing

Si l'utilisateur quitte une tâche pendant une longue période, le système efface la tâche de toutes les activités à l'exception de la racine de l'activité. Lorsque l'utilisateur retourne à la tâche, seule la racine activité est rétabli. Le système se comporte de cette manière, parce que, après un certain laps de temps, les utilisateurs ont probablement abandonné ce qu'ils faisaient avant et sont de retour à la tâche pour commencer quelque chose de nouveau.

https://developer.android.com/guide/topics/manifest/activity-element.html#always

Normalement, le système efface une tâche (supprime toutes les activités de la pile au-dessus de la racine de l'activité) dans certaines situations, lorsque l'utilisateur re-sélectionne que des tâches de l'écran d'accueil. Généralement, cela se fait si l'utilisateur n'a pas visité la tâche pour un certain laps de temps, comme 30 minutes.

Ce comportement peut être facilement reproduit sur les appareils fonctionnant en pain d'épice et les versions antérieures. Lancer une application et créer une histoire, puis appuyez sur le bouton de la maison et attendre une demi-heure. Le lancement de l'application à nouveau à partir de l'écran d'accueil et l'état a été effacé, comme si c'était de commencer une nouvelle tâche. Parfait.

Cependant, sur les appareils sous ICS et ci-dessus, je n'arrive pas à reproduire ce comportement à tous, même après une tâche a été inactif après plusieurs heures ou plusieurs jours. Lorsqu'une application est relancée à partir de l'écran d'accueil, la tâche est toujours en l'état, je l'ai laissé dans.

En supposant que la documentation est correcte, sous quelles conditions les modernes versions d'Android (API 14+) effacer automatiquement une tâche?

Si le comportement a changé, et la documentation est à jour, quel est le but de l' alwaysRetainTaskState d'attribut pour <activity/>? A la valeur par défaut a changé d' "true" ou est-ce un attribut maintenant obsolète?

Note: je ne parle pas de la Android du processus de gestion du cycle de vie, qui sera périphérique tributaires de ressources. Tuer un processus devrait être transparent pour l'utilisateur de toute façon et n'affecte pas l'état de la tâche.

41voto

Devunwired Points 27023

La grande question, après un peu de source de plongée, la réponse a m'a vraiment surprise!

Un rapide coup d'oeil à l'Androïde sources semble fournir la réponse. Commençons par regarder en arrière dans Android 2.2 à ActivityManagerService.java. Avis autour de la ligne 186 une constante définie appelés ACTIVITY_INACTIVE_RESET_TIME ce qui arrive à être fixée à 30 minutes.

// How long until we reset a task when the user returns to it.  Currently
// 30 minutes.
static final long ACTIVITY_INACTIVE_RESET_TIME = 1000*60*30;

Regarder un peu plus loin pour l' resetTaskIfNeededLocked() méthode autour de la ligne 7021 et vous verrez cette valeur vérifiée pour déterminer si la tâche doit être réinitialisé avant d'être lancé.

Rapide vers Android 4.3 sources et le code a été déplacé dans ActivityStack.java qui est appelée à partir de ActivityManagerService, mais la structure de base est la même. Cette fois, la constante est définie autour de la ligne 125:

// How long until we reset a task when the user returns to it.  Currently
// disabled.
static final long ACTIVITY_INACTIVE_RESET_TIME = 0;

Le même resetTaskIfNeededLocked() méthode se trouve autour de la ligne de 1973, et vous pouvez voir que maintenant, il vérifie si la valeur est supérieure à zéro avant d'appliquer le même délai d'attente vérifier pour effacer la tâche de l'état. Notez, cependant, que cette méthode ne fonctionne toujours vérifier FLAG_ALWAYS_RETAIN_TASK_STATE, de sorte que cet indicateur peut toujours être utilisé pour protéger un état clair, mais il semble qu'avec le contrôle extérieur désactivé ce code ne sera jamais exécutée.

Dans l'ensemble, cela semble assez des preuves convaincantes que la fonctionnalité a été désactivée dans PSBA pour les dernières versions d'Android. Je ne vois pas un moyen externe (via les propriétés du système, etc.) pour que cette valeur soit réactivé par appareil, à moins que le fabricant ont été de reconstruire le code avec une valeur ajoutée ici...mais c'est rare. La plupart des ODMs bâton de propriétés de configuration en XML ou propriétés du système qu'ils peuvent contrôler via une superposition.

Si bien que, techniquement, la fonctionnalité n'a pas été "supprimé", il me semble que la documentation n'est plus correct du point de vue de l'auto-déclenchement après un certain délai.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X