Les nouvelles limitations des applications en arrière-plan d'Android 12 pourraient être un casse-tête majeur pour les utilisateurs expérimentés

Les nouvelles limitations des applications en arrière-plan d'Android 12 pourraient constituer un casse-tête majeur pour les utilisateurs expérimentés qui utilisent des applications comme Termux et peut-être même Tasker.

Android 12 a introduit de nombreux changements, même si tous ne sont pas vraiment destinés aux utilisateurs. Des fonctionnalités telles que la refonte massive de Material You vous sont évidemment présentées au visage et difficiles à manquer, mais quelque chose comme Clé de voiture numérique le soutien pourrait être plus facile à manquer. Cependant, un changement qui pourrait même être totalement non documenté fera des ravages sur des applications comme Termux, et c'est l'introduction d'un tueur de processus en arrière-plan assez agressif.

Pour le contexte, Termux est un émulateur de terminal Linux que vous pouvez obtenir sur Android, et la gestion des packages de Termux Le système ressemble beaucoup à l'Advanced Package Tool (APT) de Debian dans le sens où vous pouvez rechercher, installer et désinstaller avec le commande

apte. Termux n'installe que quelques packages de base prêts à l'emploi, pour réduire la taille de l'APK sur le Play Store, mais vous permet de installer tous les packages supplémentaires que tu désires. Les gens utilisent souvent Termux pour transformer des smartphones plus anciens en mini-serveurs, ou l'utilisent pour exécuter d'autres programmes qui ne sont généralement pas destinés aux smartphones. Une utilisation courante consiste même à configurer nativement youtube-dl, car vous pouvez exécuter des scripts Python à l'aide de Termux sur votre smartphone.

Dans Android 12, cependant, cela a été découvert qu'un mécanisme permet de surveiller les processus enfants forkés démarrés par les applications et de les tuer s'ils consomment trop de CPU si l'application est en arrière-plan (via Michaal Rahman) a été présenté. Cela limite également le nombre de processus enfants que les processus parents peuvent générer à 32, ce qui limite considérablement le nombre d'opérations qu'une application peut effectuer en arrière-plan. Cette limite de 32 processus enfants s'applique en fait à l'ensemble du système, et pas seulement à chaque application, ce qui signifie que d'autres applications avec des processus enfants contribueront également à cette limite. J'ai testé sur le Google Pixel 6 Pro, et je peux confirmer que le PhantomProcessKiller existe et peut potentiellement faire des ravages sur Termux.

Phantom Process Killer d'Android 12 tue les processus en arrière-plan

Android 12 a introduit quelques restrictions sur les processus en arrière-plan; la première est que les processus enfants des applications consommant trop de CPU en arrière-plan seront tués si le processus parent est également en arrière-plan. La deuxième restriction introduite est une limite sur le nombre de processus enfants pouvant être actifs à un moment donné. Du valider l'historique, il semblerait que Google essayait de réprimer les processus malveillants en arrière-plan.

"Les applications pourraient utiliser Runtime.exec() pour générer un processus enfant et le framework n'aura aucune idée de son cycle de vie. Suivez maintenant ces processus chaque fois que nous les trouvons - actuellement, lors de l'échantillonnage des statistiques du processeur, ils pourraient être repérés. S'il consomme trop de CPU alors que le processus de son application parent est également en arrière-plan, tuez-le. Par défaut, nous autorisons jusqu'à 32 de ces processus; le processus avec le pire score oom adj de leurs parents sera tué s'ils sont trop nombreux.

Bien sûr, les smartphones Android sont déjà connus pour tuer les applications en arrière-plan. Presque tous les grands équipementiers s’y engagent d’une manière ou d’une autre, et des entreprises comme OnePlus, Samsung et Xiaomi sont considérés parmi les pires. Bien que l'AOSP impose certaines restrictions sur les applications en arrière-plan, il est courant que les fabricants créent leurs propres restrictions en plus de l'AOSP. Cependant, il s’agit de limitations assez strictes pour les utilisateurs expérimentés et encouragent des comportements contre lesquels les utilisateurs expérimentés s’opposent depuis longtemps. Cela augmentera peut-être la durée de vie de la batterie à long terme, mais il n'y a apparemment aucun moyen de la désactiver non plus.

Déclenchement du tueur de processus fantôme Android 12

Comme le dit le commit, 32 processus de ce type sont autorisés, et je l'ai vérifié sur mon Google Pixel 6 Pro avec la commande suivante.

adb shell "/system/bin/dumpsys activity settings"

Dans le résultat de cette commande, il y a une constante appelée "max_phantom_processes" avec une valeur de 32. Dans ce contexte, un « processus fantôme » est considéré par le système Android comme un processus enfant exécuté en arrière-plan. Si vous possédez un appareil Android 12, vous pouvez utiliser Termux pour générer plus de 32 processus enfants en créer un script bash quelque part sur votre stockage contenant le code suivant et l'exécuter (crédits à agnostique-apollon sur GitHub, un développeur impliqué dans Termux) :

for i in $(seq 40); do
sha256sum /dev/zero &
done

Pour l'exécuter, dans Termux, accédez au dossier dans lequel vous avez enregistré le script et tapez ce qui suit :

shfilename.sh

Si votre téléphone commence à être lent, cela signifie qu'il fonctionne. Le code ci-dessus génère 40 opérations sha256sum en arrière-plan (indiquées par l'esperluette) en prenant le /dev/zero fichier en entrée. sha256sum donnera le hachage SHA-256 de n'importe quel fichier donné en entrée. La raison /dev/zero est utilisé, c'est qu'il s'agit d'un fichier de longueur infinie qui contient des valeurs nulles aussi longtemps qu'il est lu, ce qui signifie que le L'opération sha256sum n'atteindra jamais la fin du fichier, ce qui constitue un bon test de résistance pour garantir un arrière-plan continu. opérations.

Après quelques secondes à une minute, vous pouvez obtenir ce qui suit :

Le "signal 9" est un signal envoyé au processus le forçant à s'arrêter, et ce signal est envoyé par le planificateur Linux. La raison pour laquelle le message apparaît est que le terminal bash est techniquement également un processus enfant de Termux, et Android 12 finit par tuer le terminal bash dans la démonstration ci-dessus. Dans la sortie logcat, vous pouvez voir ce qui suit :

11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {414579a 27434:27269:top/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237} died
11-02 13:01:52.512 1444 1764 I ActivityManager: Process PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340} died
11-02 13:01:52.517 1444 1764 I ActivityManager: Process PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340} died
11-02 13:01:52.519 1444 1764 I ActivityManager: Process PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340} died
11-02 13:01:52.532 1444 1764 I ActivityManager: Process PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340} died
11-02 13:01:52.545 1444 1764 I ActivityManager: Process PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340} died

La ligne importante est celle qui mentionne que le processus "bash" a été coupé puis est mort, et c'est pourquoi Termux cesse de fonctionner. Bien que je ne sois pas sûr de ce qu'est "nightwatch.txt", une recherche rapide sur Google semble suggérer qu'il est lié à Facebook et Facebook Messenger, deux applications que j'ai installées. J'ai testé cela avec la batterie adaptative désactivée et je me suis assuré qu'aucune optimisation de la batterie n'était appliquée à Termux non plus.

Une fois les tests terminés, il est probable que certaines opérations sha256sum se poursuivront dans le arrière-plan toujours (et appuyer sur Entrée forcera la fermeture de Termux), alors rouvrez Termux et tapez le suivant:

killall sha256sum

Bien qu'une telle limitation soit logique pour certaines applications, les applications que les utilisateurs expérimentés pourraient être plus enclins à utiliser (telles que Termux) en souffriront. Cela peut également avoir un effet sur d'autres applications que les utilisateurs expérimentés utilisent également, telles que Tasker. Il s'agit d'une limitation qui ne semble pas encore possible à surmonter et qui introduit encore plus de limitations sur les applications en arrière-plan, en plus de toutes les autres restrictions propriétaires imposées par les fabricants. Dans le fil de discussion en cours sur GitHub, agnostic-apollo mentionne ce qui suit concernant un logcat qui leur a été envoyé par courrier électronique :

"Tous les 32 logcat suivis PhantomProcessRecord appartiennent à com.wsandroid.suite et le bash de termux était l'un des processus qui ont été tués. Ainsi, comme mentionné ci-dessus, la limite de 32 processus s'applique à toutes les applications combinées. »

Curieusement, j'ai effectué les mêmes tests sur un Xiaomi 11T Pro sous Android 11 et j'ai confirmé que le comportement n'existait pas. sur cet appareil particulier dans cette configuration, même si les appareils Xiaomi sont connus pour leurs applications en arrière-plan limites. Il s’agit curieusement de l’une des politiques de gestion des applications en arrière-plan les plus strictes introduites sur n’importe quel smartphone Android, car il n’y a aucun moyen de la contourner. Même sur les appareils Xiaomi et OnePlus, il est possible de désactiver la plupart et pour certaines personnes, il suffit de désactiver toutes les optimisations de batterie sur ces appareils pour qu'elles soient satisfaites. En revanche, le tueur de processus fantôme ne peut même pas être désactivé.

Si vous comptez sur Termux pour de nombreuses opérations intensives sur l'appareil avec de nombreux processus en arrière-plan, il peut être utile de suspendre la mise à niveau pour le moment jusqu'à ce qu'il y ait plus d'informations. Si vous n’êtes pas un utilisateur expérimenté, ce n’est probablement pas quelque chose dont vous avez vraiment besoin de vous inquiéter.