מגבלות אפליקציית הרקע החדשות של אנדרואיד 12 עשויות להיות כאב ראש גדול למשתמשים חזקים

מגבלות אפליקציות הרקע החדשות של אנדרואיד 12 עשויות להוות כאב ראש גדול עבור משתמשים חזקים שמשתמשים באפליקציות כמו Termux ואולי אפילו Tasker.

אנדרואיד 12 הציג הרבה שינויים, אם כי לא כולם באמת פונים למשתמש. תכונות כמו ה-Material You עיצוב מחדש נדחקות לך בפנים וקשה לפספס אותן, אבל משהו כמו מפתח רכב דיגיטלי אולי קל יותר לפספס את התמיכה. עם זאת, שינוי אחד שאולי אפילו לא מתועד לחלוטין ימיט הרס על אפליקציות כמו Termux, וזה הצגתו של קוטל תהליכי רקע אגרסיבי למדי.

להקשר, Termux הוא אמולטור מסוף לינוקס שתוכלו להשיג באנדרואיד, וניהול החבילות של Termux המערכת דומה מאוד לכלי החבילות המתקדם (APT) של דביאן בכך שאתה יכול לחפש, להתקין ולהסיר את ההתקנה באמצעות פקודה מַתְאִים. Termux מתקינה רק כמה חבילות בסיסיות מהקופסה, כדי להקטין את גודל ה-APK בחנות Play, אך מאפשרת לך להתקין חבילות נוספות שאתה רוצה. לעתים קרובות אנשים יעשו שימוש ב-Termux כדי להפוך סמארטפונים ישנים לשרתים מיני, או להשתמש בו כדי להפעיל תוכניות אחרות שבדרך כלל אינן מכוונות לסמארטפונים. שימוש נפוץ הוא אפילו הגדרה מקורית של youtube-dl, מכיוון שאתה יכול לבצע סקריפטים של Python באמצעות Termux בסמארטפון שלך.

עם זאת, באנדרואיד 12, זה התגלה שמנגנון לניטור תהליכים ילדים מחולקים שהתחילו על ידי אפליקציות והורג אותם אם הם צורכים יותר מדי CPU אם האפליקציה נמצאת ברקע (באמצעות מישאל רחמן) הוצג. זה גם מגביל את מספר תהליכי הצאצא שתהליכי הורה יכולים להוליד ל-32, מה שמגביל מאוד את מספר הפעולות שאפליקציה יכולה לבצע ברקע. מגבלה זו של 32 תהליכים ילדים היא למעשה על פני כל המערכת, לא רק לכל אפליקציה, כלומר גם אפליקציות אחרות עם תהליכי ילד יתרמו למגבלה זו. בדקתי על Google Pixel 6 Pro, ואני יכול לאשר שה PhantomProcessKiller קיים ועלול לגרום להרס ב-Termux.

ה-Phantom Process Killer של אנדרואיד 12 הורג תהליכי רקע

אנדרואיד 12 הציגה כמה הגבלות על תהליכי רקע; הראשון הוא שתהליכי צאצא של אפליקציות שצורכות יותר מדי מעבד ברקע ייהרגו אם תהליך האב יהיה גם ברקע. ההגבלה השנייה שהוכנסה היא הגבלה על מספר תהליכי התינוק שיכולים להיות פעילים בכל זמן נתון. מ ה להתחייב בהיסטוריה, נראה שגוגל ניסתה לדכא תהליכי רקע סוררים.

"אפליקציות יכולות להשתמש ב-Runtime.exec() כדי להוליד תהליך ילד ולמסגרת לא יהיה מושג לגבי מחזור החיים שלו. כעת עקוב אחר התהליכים הללו בכל פעם שאנו מוצאים אותם - כרגע במהלך דגימת הנתונים הסטטיסטיים של המעבד ניתן היה לזהות אותם. אם הוא צורך יותר מדי מעבד בזמן שתהליך אפליקציית האב שלו נמצא גם ברקע, הרוג אותו. כברירת מחדל אנו מאפשרים עד 32 תהליכים כאלה; התהליך עם ציון ה-oom adj הגרוע ביותר של הוריהם ייהרג אם יהיו יותר מדי מהם."

כמובן, סמארטפונים אנדרואיד כבר ידועים לשמצה בהרג אפליקציות ברקע. כמעט כל יצרני ה-OEM הגדולים עוסקים בזה בדרך כלשהי, צורה או צורה, וחברות אוהבות OnePlus, סמסונג ושיאומי נחשבים בין הגרועים ביותר. בעוד ל-AOSP יש כמה הגבלות על אפליקציות רקע, זה אופייני ליצרנים לבנות הגבלות משלהם על גבי AOSP. עם זאת, אלו מגבלות די נוקשות למשתמשים חזקים ומעודדות התנהגויות שמשתמשים חזקים מתנגדים להן במשך זמן רב. אולי זה יגדיל את חיי הסוללה בטווח הארוך, אבל לכאורה גם אין דרך להשבית את זה.

מפעיל את אנדרואיד 12 Phantom Process Killer

כפי שאומר ה-commit, 32 תהליכים כאלה מותרים, ואימתתי זאת ב-Google Pixel 6 Pro שלי עם הפקודה הבאה.

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

בפלט של פקודה זו, יש קבוע שנקרא "max_phantom_processes" עם ערך של 32. בהקשר זה, "תהליך פנטום" נחשב על ידי מערכת אנדרואיד כתהליך צאצא הפועל ברקע. אם יש לך מכשיר אנדרואיד 12, אתה יכול להשתמש ב-Termux כדי להוליד יותר מ-32 תהליכי צאצא על ידי ליצור סקריפט bash איפשהו באחסון שלך המכיל את הקוד הבא ולהפעיל אותו (קרדיט ל אגנוסטי-אפולו ב-GitHub, מפתח המעורב ב-Termux):

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

כדי להפעיל אותו, ב-Termux נווט לתיקיה שבה שמרת את הסקריפט והקלד את הדברים הבאים:

shfilename.sh

אם הטלפון שלך מתחיל להרגיש בפיגור, אז זה אומר שהוא עובד. הקוד שלמעלה מוליד 40 פעולות sha256sum ברקע (מסומן באמפרסנד) תוך שימוש ב- /dev/zero קובץ כקלט. sha256sum ייתן את ה-hash SHA-256 של כל קובץ שניתן כקלט. הסיבה /dev/zero בשימוש הוא שזהו קובץ באורך אינסופי המכיל ערכי null כל עוד הוא נקרא, כלומר פעולת sha256sum לעולם לא תגיע לסוף הקובץ, והיא משמשת כמבחן מאמץ טוב כדי להבטיח רקע רציף פעולות.

לאחר מספר שניות עד דקה, ייתכן שתופיע הפריטים הבאים:

"אות 9" הוא אות שנשלח לתהליך ומאלץ אותו להיסגר, ואות זה נשלח על ידי מתזמן לינוקס. הסיבה שההודעה מופיעה היא שמסוף ה-bash הוא מבחינה טכנית גם תהליך ילד של Termux, ואנדרואיד 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 Messenger, שתי אפליקציות שכן התקנתי. בדקתי את זה עם סוללה אדפטיבית כבויה ווידאתי שלא יוחלו אופטימיזציות של סוללה גם על Termux.

לאחר שתסיים לבדוק, סביר להניח שחלק מפעולות sha256sum ימשיכו ב- עדיין רקע (ולחיצה על Enter תאלץ לסגור את Termux), אז פתחו מחדש את Termux והקלידו את הבא:

killall sha256sum

בעוד שמגבלה כזו הגיונית עבור אפליקציות מסוימות, אפליקציות שמשתמשים חזקים עשויים להיות נוטים יותר להשתמש בהן (כגון Termux) יסבלו. זה עשוי להשפיע גם על אפליקציות אחרות בהן משתמשים חזקים משתמשים, כמו Tasker. זו מגבלה שעדיין לא נראה שאפשר להתגבר עליה ומציגה עוד יותר מגבלות על אפליקציות רקע בנוסף לכל ההגבלות הקנייניות האחרות שהיצרנים מטילים. בשרשור הנושא המתמשך של GitHub, הדברים הבאים מוזכרים על ידי agnostic-apollo לגבי logcat שנשלח אליהם בדוא"ל:

"כל 32 ה-logcat PhantomProcessRecord שייכים ל-com.wsandroid.suite וה-bash של termux היה אחד התהליכים שנהרגו. אז כפי שצוין לעיל, מגבלת 32 התהליך היא עבור כל האפליקציות גם יחד"

באופן משעשע, הרצתי את אותן בדיקות ב-Xiaomi 11T Pro עם אנדרואיד 11 ואישרתי שההתנהגות לא קיימת במכשיר המסוים הזה בתצורה הזו, למרות שמכשירי Xiaomi ידועים לשמצה באפליקציית הרקע מגבלות. זהו, באופן מוזר, אחת ממדיניות ניהול אפליקציות הרקע המחמירה ביותר שהוצגה בכל סמארטפון אנדרואיד, מכיוון שאין דרך לעקוף זאת. אפילו במכשירי Xiaomi ומכשירי OnePlus, אפשר להשבית רוב של זה, ועבור אנשים מסוימים, השבתת כל אופטימיזציית הסוללה במכשירים האלה מספיקה כדי שהם יהיו מרוצים. לעומת זאת, לא ניתן אפילו להשבית את רוצח תהליכי הפנטום.

אם אתה מסתמך על Termux עבור הרבה פעולות במכשיר שהן אינטנסיביות עם תהליכי רקע רבים, אולי כדאי לעכב את השדרוג לעת עתה עד שיהיה מידע נוסף. אם אתה לא משתמש חזק, סביר להניח שזה לא משהו שאתה באמת צריך לדאוג לגביו.