Android 12-ის ახალი ფონური აპლიკაციის შეზღუდვები შეიძლება იყოს მთავარი თავის ტკივილი ძლიერი მომხმარებლებისთვის

Android 12-ის ახალი ფონური აპლიკაციების შეზღუდვები შეიძლება იყოს მთავარი თავის ტკივილი ძლიერი მომხმარებლებისთვის, რომლებიც იყენებენ აპებს, როგორიცაა Termux და შესაძლოა Tasker-იც კი.

Android 12 შემოიღო ბევრი ცვლილება, თუმცა ყველა მათგანი ნამდვილად არ არის მომხმარებლის წინაშე. ისეთი ფუნქციები, როგორიცაა შენს ხელახალი დიზაინის მასიური მასალა, აშკარად სახეშია და ძნელია გამოტოვო, მაგრამ რაღაც მსგავსი მანქანის ციფრული გასაღები მხარდაჭერის გამოტოვება შეიძლება უფრო ადვილი იყოს. თუმცა, ერთი ცვლილება, რომელიც შესაძლოა სრულიად დაუსაბუთებელიც კი იყოს, არღვევს აპებს, როგორიცაა Termux, და ეს არის საკმაოდ აგრესიული ფონური პროცესის მკვლელის დანერგვა.

კონტექსტში, Termux არის Linux ტერმინალის ემულატორი, რომელიც შეგიძლიათ მიიღოთ Android-ზე და Termux-ის პაკეტის მენეჯმენტში სისტემა ძალიან ჰგავს Debian's Advanced Package Tool-ს (APT), რომლითაც შეგიძლიათ მოძებნოთ, დააინსტალიროთ და წაშალოთ ბრძანება აპ. Termux აინსტალირებს მხოლოდ რამდენიმე ძირითად პაკეტს, რათა შეამციროს APK ზომა Play Store-ზე, მაგრამ გაძლევთ საშუალებას 

დააინსტალირეთ ნებისმიერი დამატებითი პაკეტი რომ გსურს. ადამიანები ხშირად გამოიყენებენ Termux-ს ძველი სმარტფონების მინი სერვერებად გადაქცევისთვის, ან გამოიყენებენ მას სხვა პროგრამების გასაშვებად, რომლებიც, როგორც წესი, არ არის მიმართული სმარტფონებზე. გავრცელებული გამოყენებაა youtube-dl-ის დაყენებაც კი, რადგან თქვენ შეგიძლიათ შეასრულოთ Python სკრიპტები Termux-ის გამოყენებით თქვენს სმარტფონზე.

თუმცა Android 12-ში, აღმოჩნდა რომ მექანიზმი, რომელიც აკონტროლებს აპლიკაციების მიერ დაწყებულ გაფუჭებულ ბავშვთა პროცესებს და კლავს მათ, თუ ისინი მოიხმარენ ძალიან ბევრ CPU-ს, თუ აპი ფონზეა ( მიშაალ რაჰმანი) დაინერგა. ის ასევე ზღუდავს შვილობილი პროცესების რაოდენობას, რომლებიც მშობელმა პროცესებმა შეიძლება გამოიწვიოს 32-მდე, რაც მნიშვნელოვნად ზღუდავს იმ ოპერაციების რაოდენობას, რომელთა შესრულებაც აპს შეუძლია ფონზე. ეს 32 ბავშვის პროცესის ლიმიტი რეალურად მთელ სისტემაშია და არა მხოლოდ თითო აპში, რაც იმას ნიშნავს, რომ სხვა აპები, რომლებსაც აქვთ ბავშვთა პროცესები, ასევე ხელს შეუწყობენ ამ ლიმიტს. მე გამოვცადე Google Pixel 6 Pro-ზე და შემიძლია დავადასტურო, რომ PhantomProcessKiller არსებობს და პოტენციურად შეუძლია ზიანი მიაყენოს Termux-ს.

Android 12-ის Phantom Process Killer კლავს ფონურ პროცესებს

Android 12-მა შემოიღო რამდენიმე შეზღუდვა ფონურ პროცესებზე; პირველი არის ის, რომ აპლიკაციების შვილობილი პროცესები, რომლებიც მოიხმარენ ძალიან ბევრ CPU-ს ფონზე, დაიღუპება, თუ მშობელი პროცესი ასევე იქნება ფონზე. შემოღებული მეორე შეზღუდვა არის ლიმიტი ბავშვის პროცესების რაოდენობაზე, რომლებიც შეიძლება იყოს აქტიური ნებისმიერ დროს. Დან ჩაიდინოს ისტორია, როგორც ჩანს, Google ცდილობდა შეემცირებინა თაღლითური ფონური პროცესები.

„აპებს შეუძლიათ გამოიყენონ Runtime.exec() შვილობილი პროცესის გამოსაჩენად და ჩარჩოს წარმოდგენა არ ექნება მისი სასიცოცხლო ციკლის შესახებ. ახლა თვალყური ადევნეთ ამ პროცესებს, როდესაც მათ ვიპოვით - ამჟამად პროცესორის სტატისტიკის შერჩევის დროს, მათი დაფიქსირება შესაძლებელია. თუ ის მოიხმარს ძალიან ბევრ CPU-ს, ხოლო მისი მშობელი აპლიკაციის პროცესი ასევე ფონზეა, მოკალით იგი. ნაგულისხმევად ჩვენ დავუშვებთ 32-მდე ასეთ პროცესს; მათი მშობლების ყველაზე ცუდი ქულის მქონე პროცესი დაიღუპება, თუ ისინი ძალიან ბევრი იქნება."

რა თქმა უნდა, Android სმარტფონები უკვე ცნობილია ფონური აპლიკაციების მკვლელობით. თითქმის ყველა ძირითადი OEM ჩართულია მასში რაიმე ფორმით, ფორმით ან ფორმით, და მოსწონს კომპანიებს OnePlus, Samsung და Xiaomi ითვლება ყველაზე ცუდებს შორის. მიუხედავად იმისა, რომ AOSP-ს აქვს გარკვეული ფონური აპლიკაციების შეზღუდვები, მწარმოებლებისთვის დამახასიათებელია AOSP-ის თავზე საკუთარი შეზღუდვების შექმნა. თუმცა, ეს საკმაოდ მკაცრი შეზღუდვებია ძლიერი მომხმარებლებისთვის და წაახალისებს ქცევებს, რომლებსაც დიდი ხანია ეწინააღმდეგებიან ენერგეტიკის მომხმარებლები. შესაძლოა, ეს გაზრდის ბატარეის ხანგრძლივობას გრძელვადიან პერსპექტივაში, მაგრამ, როგორც ჩანს, მისი გამორთვის გზაც არ არსებობს.

Android 12 Phantom Process Killer-ის გააქტიურება

როგორც კომიტი ამბობს, 32 ასეთი პროცესია დაშვებული და ეს ჩემს Google Pixel 6 Pro-ზე დავადასტურე შემდეგი ბრძანებით.

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

ამ ბრძანების გამოსავალში არის მუდმივი სახელწოდებით "max_phantom_processes" მნიშვნელობით 32. ამ კონტექსტში, „ფანტომური პროცესი“ ანდროიდის სისტემის მიერ შეფასებულია, როგორც ბავშვის პროცესი, რომელიც მუშაობს ფონზე. თუ გაქვთ Android 12 მოწყობილობა, შეგიძლიათ გამოიყენოთ Termux 32-ზე მეტი ბავშვის პროცესის დასანერგად შექმენით bash სკრიპტი სადმე თქვენს მეხსიერებაში, რომელიც შეიცავს შემდეგ კოდს და შეასრულეთ იგი (კრედიტები აგნოსტიკოსი-აპოლონი GitHub-ზე, დეველოპერი, რომელიც ჩართულია Termux-ში):

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

მის შესასრულებლად, Termux-ში გადადით საქაღალდეში, რომელშიც შეინახეთ სკრიპტი და ჩაწერეთ შემდეგი:

shfilename.sh

თუ თქვენი ტელეფონი იწყებს შეფერხებას, ეს ნიშნავს, რომ ის მუშაობს. ზემოაღნიშნული კოდი აწარმოებს 40 sha256sum ოპერაციას ფონზე (აღნიშნულია ამპერსანტით) /dev/zero ფაილი შეყვანის სახით. sha256sum მისცემს SHA-256 ჰეშს ნებისმიერი ფაილის შეყვანის სახით. Მიზეზი /dev/zero გამოიყენება იმით, რომ ეს არის უსასრულო სიგრძის ფაილი, რომელიც შეიცავს null მნიშვნელობებს მანამ, სანამ ის წაკითხულია, რაც იმას ნიშნავს, რომ sha256sum ოპერაცია ვერასოდეს მიაღწევს ფაილის ბოლომდე, ეს არის კარგი სტრეს ტესტი უწყვეტი ფონის უზრუნველსაყოფად ოპერაციები.

რამდენიმე წამიდან ერთ წუთამდე, შეიძლება გამოჩნდეს შემდეგი:

"სიგნალი 9" არის სიგნალი, რომელიც იგზავნება პროცესზე, რომელიც აიძულებს მის გამორთვას და ეს სიგნალი იგზავნება Linux-ის განრიგის მიერ. მესიჯის გამოჩენის მიზეზი არის ის, რომ bash ტერმინალი ტექნიკურად ასევე არის Termux-ის შვილობილი პროცესი და Android 12 მთავრდება ზემოაღნიშნული დემონსტრირებით bash ტერმინალის მოკვლაში. logcat გამომავალში შეგიძლიათ იხილოთ შემდეგი:

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

მნიშვნელოვანი ხაზი არის ის, რომელიც აღნიშნავს, რომ "ბაშის" პროცესი შემცირდა და შემდეგ მოკვდა და ამიტომაც წყვეტს ტერმუქსი მუშაობას. მიუხედავად იმისა, რომ არ ვარ დარწმუნებული, რა არის "nightwatch.txt", გუგლის სწრაფი ძებნა, როგორც ჩანს, ვარაუდობს, რომ ის დაკავშირებულია Facebook-თან და Facebook Messenger-თან, ორ აპთან, რომელიც მე დაინსტალირებული მაქვს. მე გამოვცადე ეს ადაპტური ბატარეის გამორთვით და დავრწმუნდი, რომ არც ბატარეის ოპტიმიზაცია იყო გამოყენებული Termux-ზე.

ტესტირების დასრულების შემდეგ, სავარაუდოდ, sha256sum-ის ზოგიერთი ოპერაცია გაგრძელდება ფონი მაინც (და enter-ზე დაჭერით იძულებით დახურავთ Termux), ასე რომ ხელახლა გახსენით Termux და ჩაწერეთ შემდეგი:

killall sha256sum

მიუხედავად იმისა, რომ ზოგიერთი აპლიკაციისთვის ასეთი შეზღუდვა აზრიანია, აპები, რომელთა გამოყენება უფრო მეტად მიდრეკილნი არიან მომხმარებლებისთვის (როგორიცაა Termux) დაზარალდება. ამან შეიძლება გავლენა იქონიოს სხვა აპებზეც, რომლებსაც იყენებენ ძლიერი მომხმარებლები, როგორიცაა Tasker. ეს არის შეზღუდვა, რომლის გადალახვა ჯერ კიდევ შეუძლებელია და შემოაქვს კიდევ უფრო მეტი შეზღუდვა ფონურ აპებზე, ყველა სხვა საკუთრების შეზღუდვის გარდა, რომელსაც მწარმოებლები აწესებენ. GitHub-ის საკითხზე მიმდინარე თემაში აგნოსტიკურ-აპოლოს მიერ არის ნახსენები ლოგიკატის შესახებ, რომელიც მათ ელფოსტით გაუგზავნეს:

”ყველა 32 თვალყურის დევნება logcat PhantomProcessRecord ეკუთვნის com.wsandroid.suite-ს და termux's bash იყო ერთ-ერთი პროცესი, რომელიც დაიღუპა. ასე რომ, როგორც ზემოთ აღინიშნა, 32 პროცესის ლიმიტი არის ყველა აპლიკაციისთვის კომბინირებული"

სახალისოა, რომ იგივე ტესტები ჩავატარე Xiaomi 11T Pro-ზე, რომელიც მუშაობს Android 11-ზე და დავადასტურე, რომ ქცევა არ არსებობს ამ კონფიგურაციის კონკრეტულ მოწყობილობაზე, მიუხედავად იმისა, რომ Xiaomi მოწყობილობები ცნობილია ფონური აპლიკაციით შეზღუდვები. უცნაურია, ეს არის ერთ-ერთი ყველაზე მკაცრი ფონური აპლიკაციების მართვის პოლიტიკა, რომელიც დანერგილია Android-ის ნებისმიერ სმარტფონზე, რადგან ამის გადასაჭრელი გზა არ არსებობს. Xiaomi მოწყობილობებზე და OnePlus მოწყობილობებზეც კი შესაძლებელია გამორთვა ყველაზე და ზოგიერთი ადამიანისთვის, ამ მოწყობილობებზე ბატარეის ყველა ოპტიმიზაციის გამორთვა საკმარისია იმისთვის, რომ ბედნიერები იყვნენ. ამის საპირისპიროდ, ფანტომური პროცესის მკვლელის გამორთვაც კი შეუძლებელია.

თუ თქვენ ეყრდნობით Termux-ს ბევრ მოწყობილობაზე ოპერაციებისთვის, რომლებიც ინტენსიურია მრავალი ფონური პროცესით, შესაძლოა ღირდეს განახლების შეჩერება ამ დროისთვის, სანამ მეტი ინფორმაცია არ იქნება. თუ თქვენ არ ხართ ძლიერი მომხმარებელი, მაშინ ეს არ არის ის, რაც ნამდვილად გჭირდებათ.