قد تكون قيود تطبيقات الخلفية الجديدة لنظام Android 12 بمثابة صداع كبير للمستخدمين المتميزين

قد تكون قيود تطبيقات الخلفية الجديدة لنظام Android 12 بمثابة صداع كبير للمستخدمين المتميزين الذين يستخدمون تطبيقات مثل Termux وربما حتى Tasker.

أندرويد 12 لقد أدخلت الكثير من التغييرات، على الرغم من أنها ليست كلها موجهة للمستخدم حقًا. من الواضح أن ميزات مثل المادة الضخمة التي تعيد تصميمها تكون محفورة في وجهك ويصعب تفويتها، ولكن شيء من هذا القبيل مفتاح السيارة الرقمي قد يكون من الأسهل تفويت الدعم. ومع ذلك، هناك تغيير واحد قد يكون غير موثق تمامًا وسيُحدث ضررًا على تطبيقات مثل Termux، وهو تقديم أداة قاتلة للعمليات الخلفية شديدة العدوانية.

للسياق، Termux هو محاكي Linux الطرفي الذي يمكنك الحصول عليه على Android وإدارة حزم Termux يشبه النظام إلى حد كبير أداة الحزمة المتقدمة (APT) الخاصة بـ Debian حيث يمكنك البحث والتثبيت وإلغاء التثبيت باستخدام يأمر ملائم. يقوم Termux بتثبيت عدد قليل من الحزم الأساسية خارج الصندوق، لتقليل حجم APK على متجر Play، ولكنه يسمح لك بذلك تثبيت أي حزم إضافية التي ترغب فيها. غالبًا ما يستخدم الأشخاص برنامج Termux لتحويل الهواتف الذكية القديمة إلى خوادم صغيرة، أو استخدامه لتشغيل برامج أخرى لا تستهدف عادةً الهواتف الذكية. الاستخدام الشائع هو إعداد youtube-dl محليًا، حيث يمكنك تنفيذ نصوص Python باستخدام Termux على هاتفك الذكي.

ومع ذلك، في نظام Android 12، تم اكتشافها أن هناك آلية لمراقبة العمليات الفرعية المتشعبة التي تبدأها التطبيقات وتقتلها إذا استهلكت الكثير من وحدة المعالجة المركزية إذا كان التطبيق في الخلفية (عبر مشعل الرحمن) كانت مقدمة. كما أنه يحد أيضًا من عدد العمليات الفرعية التي يمكن أن تنتجها العمليات الأصلية إلى 32، مما يحد بشكل كبير من عدد العمليات التي يمكن للتطبيق إكمالها في الخلفية. إن حد العمليات الفرعية البالغ 32 هو في الواقع عبر النظام بأكمله، وليس فقط لكل تطبيق، مما يعني أن التطبيقات الأخرى التي تحتوي على عمليات فرعية ستساهم في هذا الحد أيضًا. لقد اختبرت على Google Pixel 6 Pro، وأستطيع أن أؤكد أن PhantomProcessKiller موجود ويمكن أن يسبب الفوضى على Termux.

يقوم Phantom Process Killer في Android 12 بقتل العمليات الخلفية

قدم Android 12 بعض القيود على العمليات في الخلفية؛ الأول هو أن العمليات الفرعية للتطبيقات التي تستهلك الكثير من وحدة المعالجة المركزية في الخلفية سيتم قتلها إذا كانت العملية الأصلية أيضًا في الخلفية. القيد الثاني الذي تم تقديمه هو الحد الأقصى لعدد العمليات التابعة التي يمكن أن تكون نشطة في أي وقت محدد. من ارتكاب التاريخ، يبدو أن Google كانت تحاول تضييق الخناق على عمليات الخلفية المارقة.

"يمكن للتطبيقات استخدام Runtime.exec() لإنتاج عملية فرعية ولن يكون لدى إطار العمل أي فكرة عن دورة حياتها. الآن قم بتتبع هذه العمليات عندما نجدها - حاليًا أثناء أخذ عينات إحصائيات وحدة المعالجة المركزية، يمكن رصدها. إذا كان يستهلك الكثير من وحدة المعالجة المركزية (CPU) بينما تكون عملية التطبيق الأصلية الخاصة به أيضًا في الخلفية، فقم بإيقافه. بشكل افتراضي، نسمح بما يصل إلى 32 عملية من هذا القبيل؛ سيتم قتل العملية التي حصلت على أسوأ نتيجة لوالديهم إذا كان هناك عدد كبير جدًا منهم."

بالطبع، تشتهر الهواتف الذكية التي تعمل بنظام Android بقتل التطبيقات في الخلفية. تشارك جميع الشركات المصنعة للمعدات الأصلية تقريبًا في هذا الأمر بطريقة أو شكل أو شكل ما، كما تحب الشركات تعتبر 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 "العملية الوهمية" بمثابة عملية فرعية تعمل في الخلفية. إذا كان لديك جهاز يعمل بنظام التشغيل 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 المستخدم هو أنه ملف ذو طول لا نهائي يحتوي على قيم فارغة طوال فترة قراءته، مما يعني أن لن تصل عملية 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

السطر المهم هو الذي يذكر أن عملية "bash" تم قطعها ثم توقفت، ولهذا السبب توقف Termux عن العمل. على الرغم من أنني غير متأكد من معنى "nightwatch.txt"، يبدو أن البحث السريع على Google يشير إلى أنه مرتبط بـ Facebook وFacebook Messenger، وهما تطبيقان قمت بتثبيتهما. لقد اختبرت هذا مع إيقاف تشغيل البطارية التكيفية وتأكدت من عدم تطبيق أي تحسينات على البطارية على Termux أيضًا.

بعد الانتهاء من الاختبار، من المحتمل أن تستمر بعض عمليات sha256sum في ملف لا تزال الخلفية ثابتة (وسيؤدي الضغط على مفتاح الإدخال إلى إغلاق Termux)، لذا أعد فتح Termux واكتب التالي:

killall sha256sum

في حين أن هذا القيد منطقي بالنسبة لبعض التطبيقات، فإن التطبيقات التي قد يميل المستخدمون المتميزون إلى استخدامها (مثل Termux) ستعاني. قد يكون لهذا أيضًا تأثير على التطبيقات الأخرى التي يستخدمها المستخدمون المتميزون أيضًا، مثل Tasker. إنه قيد لا يبدو من الممكن التغلب عليه حتى الآن ويقدم المزيد من القيود على تطبيقات الخلفية بالإضافة إلى جميع قيود الملكية الأخرى التي يفرضها المصنعون. في موضوع مشكلة GitHub المستمر، تم ذكر ما يلي بواسطة agnostic-apollo فيما يتعلق بسجل تم إرساله إليهم عبر البريد الإلكتروني:

"جميع ملفات logcat PhantomProcessRecord الـ 32 التي تم تتبعها تنتمي إلى com.wsandroid.suite وكان bash الخاص بـ termux أحد العمليات التي تم إيقافها. وكما ذكر أعلاه، الحد الأقصى للعملية هو 32 لجميع التطبيقات مجتمعة"

ومن المضحك أنني أجريت نفس الاختبارات على هاتف Xiaomi 11T Pro الذي يعمل بنظام Android 11 وأكدت أن هذا السلوك غير موجود على هذا الجهاز المحدد بهذا التكوين، على الرغم من أن أجهزة Xiaomi مشهورة بتطبيقات الخلفية محددات. من الغريب أن هذه إحدى سياسات إدارة تطبيقات الخلفية الأكثر صرامة والتي تم تقديمها على أي هاتف ذكي يعمل بنظام Android، حيث لا توجد طريقة للتغلب عليها. حتى على أجهزة Xiaomi وأجهزة OnePlus، من الممكن التعطيل معظم منه، وبالنسبة لبعض الأشخاص، يعد تعطيل جميع تحسينات البطارية على تلك الأجهزة كافيًا ليكونوا سعداء. في المقابل، لا يمكن حتى تعطيل العملية الوهمية القاتلة.

إذا كنت تعتمد على Termux في الكثير من العمليات التي تتم على الجهاز والتي تتطلب العديد من العمليات في الخلفية، فقد يكون من المفيد تأجيل الترقية في الوقت الحالي حتى يتوفر المزيد من المعلومات. إذا لم تكن مستخدمًا قويًا، فمن المحتمل ألا يكون هذا أمرًا يجب أن تقلق بشأنه حقًا.