7 votes

Qu'est-il advenu de la résiliation automatique ?

Dans Mac OS X Lion (10.7), Apple a introduit une fonctionnalité appelée "Résiliation automatique" où les applications quittent automatiquement le système après un certain temps d'inactivité.

Personnellement, je n'ai jamais vu cela fonctionner qu'avec Preview et quelques autres applications. Ni Apple ni les développeurs tiers n'ont semblé l'adopter. Et ces dernières années, je n'ai pas vu une seule application quitter automatiquement, pas même Preview.

Ma question est la suivante : qu'est-il advenu de cette fonction ? Existe-t-elle encore ? Y a-t-il des développeurs qui l'utilisent ? Et pourquoi Apple elle-même a-t-elle cessé de l'utiliser dans ses applications ?

6voto

Mecki Points 609

La réponse de Graham Miln est très complète, il y a juste quelques notes que j'aimerais ajouter :

1) Une application peut prendre en charge Résiliation automatique o Cessation soudaine des activités ou même ambos . La différence entre les deux est la suivante : Avec la terminaison automatique, le système peut quitter l'application "à volonté", mais il la quittera "normalement" (comme si vous choisissiez la terminaison automatique). Quit <AppName> de la <AppName> ), ce qui permet à l'application d'effectuer un certain travail lorsqu'elle est quittée, de sorte qu'elle puisse être restaurée dans cet état lorsqu'elle est rouverte. Avec l'arrêt brutal, le système peut "tuer" l'application "à volonté" sans que l'application n'ait la possibilité d'effectuer une quelconque action avant de mourir, puisqu'elle mourra instantanément, ce qui est beaucoup plus rapide.

2) Les applications peuvent prendre en charge l'une ou l'autre forme de résiliation sans le déclarer dans leur Info.plist de sorte que le fichier grep Le fait de ne pas répertorier une application ne signifie pas qu'elle ne prend pas en charge l'une ou l'autre des fonctionnalités. En fait, l'application Info.plist ne modifie que le comportement par défaut d'une application. Le comportement par défaut est de ne prendre en charge ni l'un ni l'autre, à moins que le code n'active l'un ou l'autre explicitement. Lorsqu'elles sont déclarées dans leur Info.plist le comportement est inverse : La fonctionnalité déclarée est activée par défaut, à moins que le code ne la désactive explicitement.

3) La raison pour laquelle ces fonctions sont contrôlées par le code est que seule l'application elle-même peut savoir si elle est réellement inactive ou si elle attend qu'un événement se produise et ne doit donc pas s'éteindre à ce moment-là. Une application peut donc temporairement désactiver les deux fonctions pendant qu'elle attend un événement ou qu'elle traite des données en interne, puis les réactiver une fois qu'elle a terminé.

4) Dans les deux cas, le système décide quand mettre fin à une application et quand ne pas le faire ("à volonté") et dans de nombreux cas, le système ne veut tout simplement pas le faire car il n'a aucune raison de le faire. Par exemple, si le système manque de mémoire, il cherchera agressivement des applications auxquelles il peut mettre fin afin de libérer rapidement de la mémoire pour celles qui continueront à fonctionner, mais tant qu'il n'y a pas de pénurie, quel avantage le système aurait-il à tuer ces applications ? La prochaine fois que vous les utiliserez, il suffira de les redémarrer, ce qui constitue une perte de temps de traitement alors qu'il n'y avait aucune raison de les quitter au départ. Le manque de mémoire n'est pas défini par la quantité de mémoire libre dont vous disposez (il n'y a pas de manque si toute la mémoire semble utilisée), mais par ce que l'on appelle la "pression de la mémoire". Moniteur d'activité peut vous indiquer la pression de mémoire de votre système. Ainsi, ce n'est pas parce qu'une application prend en charge l'une ou l'autre forme de résiliation que le système utilisera effectivement cette fonction.

5) Avec l'introduction des services XPC dans la version 10.8, certaines applications ont commencé à utiliser ces petits assistants pour effectuer leurs tâches de traitement. Les services XPC supportent implicitement la terminaison soudaine. Bien qu'ils appartiennent à une application, les services XPC n'affichent aucune interface utilisateur (et n'apparaissent pas dans le Dock), de sorte que vous ne remarquerez pas quand ils sont démarrés et quand ils se terminent. Cela signifie qu'au lieu que le système mette fin à l'application entière pour économiser des ressources, les applications gourmandes en ressources peuvent utiliser les services XPC et le système mettra fin à ces services XPC si nécessaire, ce qui rend souvent inutile que l'application elle-même prenne en charge l'une ou l'autre forme de terminaison, car mettre fin à l'application n'économisera pas beaucoup de ressources au système si l'utilisation principale des ressources est causée par les services XPC de l'application en question.

5voto

Graham Miln Points 39606

Résiliation automatique fait toujours partie de MacOS. Lorsqu'il est correctement mis en œuvre, vous ne devriez pas le voir à l'œuvre.

Pour savoir quelles applications connaissent la terminaison automatique, exécutez la commande suivante dans la fenêtre Terminal.app :

grep -r NSSupportsAutomaticTermination /Applications

Nécessite plus de code

La prise en charge de la résiliation automatique nécessite des efforts supplémentaires et souvent importants de la part du développeur de l'application.

L'application doit faire face à un environnement dans lequel elle peut être amenée à quitter l'application à (presque) tout moment ; cela signifie qu'elle doit être capable de sauvegarder et de restaurer l'état rapidement, sans interaction de l'utilisateur et à (presque) tout moment :

La résiliation automatique est une fonction que vous devez explicitement coder dans votre application. Déclarer la prise en charge de la terminaison automatique est facile, mais les applications doivent également travailler avec le système pour sauvegarder l'état actuel de leur interface utilisateur afin qu'il puisse être restauré plus tard si nécessaire. Le système peut tuer à tout moment le processus sous-jacent d'une application à terminaison automatique, c'est pourquoi la sauvegarde de ces informations assure la continuité de l'application. En général, le système tue le processus sous-jacent d'une application quelque temps après que l'utilisateur a fermé toutes les fenêtres de l'application. Cependant, le système peut également tuer une application avec des fenêtres ouvertes si l'application n'est pas actuellement à l'écran, peut-être parce que l'utilisateur l'a cachée ou a changé d'espace.

Demandez à Apple

La raison pour laquelle Apple semble avoir supprimé la prise en charge de certaines de leurs applications dans OS X 10.11 est un mystère. question à adresser à Apple .

Une question de priorités

Toute personne qui écrit des applications Mac doit juger si cette fonctionnalité vaut la peine d'être mise en œuvre et si le temps consacré à l'ingénierie ne serait pas mieux utilisé ailleurs. Il s'agira toujours d'une question d'appréciation pour le développeur, et je pense donc que votre question ne pourra jamais recevoir de réponse définitive.

Informer les développeurs

Si vous souhaitez que certaines applications prennent en charge la résiliation automatique, indiquez-le aux développeurs de l'application. Si un nombre suffisant de clients apprécient la résiliation automatique, les développeurs prendront le temps de la mettre en œuvre.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X