ข้อ จำกัด ของแอปพื้นหลังใหม่ของ Android 12 อาจสร้างปัญหาใหญ่ให้กับผู้ใช้ระดับสูง

ข้อ จำกัด ของแอปพื้นหลังใหม่ของ Android 12 อาจทำให้ผู้ใช้ระดับสูงที่ใช้แอปเช่น Termux และแม้แต่ Tasker ปวดหัวอย่างมาก

แอนดรอยด์ 12 มีการเปลี่ยนแปลงมากมาย แม้ว่าจะไม่ใช่ทั้งหมดที่ผู้ใช้ต้องเผชิญจริงๆ คุณสมบัติเช่นวัสดุขนาดใหญ่ที่คุณออกแบบใหม่นั้นถูกผลักไปบนใบหน้าของคุณอย่างเห็นได้ชัดและยากที่จะพลาด แต่ก็มีบางอย่างที่คล้ายกัน กุญแจรถดิจิตอล การสนับสนุนอาจจะพลาดได้ง่ายกว่า อย่างไรก็ตาม การเปลี่ยนแปลงอย่างหนึ่งที่อาจไม่มีเอกสารบันทึกไว้ทั้งหมดจะสร้างความหายนะให้กับแอปอย่าง Termux และนั่นคือการเปิดตัวนักฆ่ากระบวนการพื้นหลังที่ค่อนข้างก้าวร้าว

สำหรับบริบท Termux เป็นโปรแกรมจำลองเทอร์มินัล Linux ที่คุณสามารถใช้บน Android และการจัดการแพ็คเกจของ Termux ระบบนั้นเหมือนกับ Advanced Package Tool (APT) ของ Debian ตรงที่คุณสามารถค้นหา ติดตั้ง และถอนการติดตั้งด้วย สั่งการ ฉลาด. Termux ติดตั้งแพ็คเกจพื้นฐานเพียงไม่กี่แพ็คเกจนอกกรอบ เพื่อลดขนาด APK บน Play Store แต่ช่วยให้คุณ ติดตั้งแพ็คเกจพิเศษใด ๆ ที่คุณต้องการ ผู้คนมักจะใช้ Termux เพื่อเปลี่ยนสมาร์ทโฟนรุ่นเก่าให้เป็นเซิร์ฟเวอร์ขนาดเล็ก หรือใช้เพื่อรันโปรแกรมอื่นๆ ที่โดยทั่วไปไม่ได้มุ่งเป้าไปที่สมาร์ทโฟน การใช้งานทั่วไปคือการตั้งค่า youtube-dl โดยกำเนิด เนื่องจากคุณสามารถรันสคริปต์ Python โดยใช้ Termux บนสมาร์ทโฟนของคุณได้

อย่างไรก็ตามใน Android 12 มันถูกค้นพบ เป็นกลไกในการตรวจสอบกระบวนการลูกที่แยกออกจากกันที่เริ่มต้นโดยแอปและฆ่าพวกเขาหากพวกเขาใช้ CPU มากเกินไปหากแอปอยู่ในพื้นหลัง (ผ่าน มิชาล ราห์มาน) ได้รับการแนะนำ นอกจากนี้ยังจำกัดจำนวนกระบวนการย่อยที่กระบวนการหลักสามารถเกิดขึ้นได้เหลือ 32 กระบวนการ ซึ่งจำกัดจำนวนการดำเนินการที่แอปสามารถทำได้ในเบื้องหลังอย่างมาก จริงๆ แล้วขีดจำกัดกระบวนการย่อย 32 กระบวนการนั้นครอบคลุมทั่วทั้งระบบ ไม่ใช่แค่ต่อแอป หมายความว่าแอปอื่นๆ ที่มีกระบวนการย่อยจะสนับสนุนขีดจำกัดนั้นเช่นกัน ฉันทดสอบกับ Google Pixel 6 Pro และฉันสามารถยืนยันได้ว่า PhantomProcessKiller มีอยู่และอาจสร้างความเสียหายให้กับ Termux ได้

Phantom Process Killer ของ Android 12 ฆ่ากระบวนการพื้นหลัง

Android 12 นำเสนอข้อจำกัดบางประการเกี่ยวกับกระบวนการในเบื้องหลัง ประการแรกคือกระบวนการลูกของแอปที่ใช้ CPU มากเกินไปในพื้นหลังจะถูกฆ่าหากกระบวนการหลักอยู่ในพื้นหลังด้วย ข้อจำกัดที่สองที่แนะนำคือการจำกัดจำนวนกระบวนการย่อยที่สามารถใช้งานได้ในเวลาใดก็ตาม จาก กระทำประวัติศาสตร์ดูเหมือนว่า Google กำลังพยายามปราบปรามกระบวนการเบื้องหลังอันธพาล

“แอพสามารถใช้ Runtime.exec() เพื่อสร้างกระบวนการย่อย และเฟรมเวิร์กจะไม่มีความคิดเกี่ยวกับวงจรชีวิตของมัน ตอนนี้ติดตามกระบวนการเหล่านั้นทุกครั้งที่เราพบ - ขณะนี้อยู่ระหว่างการสุ่มตัวอย่างสถิติ CPU อาจถูกตรวจพบได้ หากใช้ CPU มากเกินไปในขณะที่กระบวนการแอปหลักทำงานอยู่เบื้องหลัง ให้ปิดการทำงานนั้น ตามค่าเริ่มต้น เราอนุญาตให้มีกระบวนการดังกล่าวได้สูงสุด 32 กระบวนการ กระบวนการที่มีคะแนน oom adj แย่ที่สุดของผู้ปกครองจะถูกฆ่าตายหากมีมากเกินไป”

แน่นอนว่าสมาร์ทโฟน 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 ในบริบทนี้ "กระบวนการ Phantom" จะถูกตัดสินโดยระบบ Android ให้เป็นกระบวนการลูกที่ทำงานอยู่เบื้องหลัง หากคุณมีอุปกรณ์ Android 12 คุณสามารถใช้ Termux เพื่อสร้างกระบวนการลูกมากกว่า 32 กระบวนการโดย สร้างสคริปต์ทุบตีที่ไหนสักแห่งในที่เก็บข้อมูลของคุณที่มีรหัสต่อไปนี้และดำเนินการ (เครดิตไปที่ ผู้ไม่เชื่อเรื่องพระเจ้า-อพอลโล บน 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

บรรทัดสำคัญคือบรรทัดที่ระบุว่ากระบวนการ "ทุบตี" ถูกตัดแต่งแล้วจึงหยุดทำงาน และนั่นคือสาเหตุที่ Termux หยุดทำงาน แม้ว่าฉันจะไม่แน่ใจว่า "nightwatch.txt" คืออะไร แต่การค้นหาโดย Google แบบคร่าว ๆ ดูเหมือนจะแนะนำว่าเกี่ยวข้องกับ Facebook และ Facebook Messenger ซึ่งเป็นสองแอปที่ฉันติดตั้งไว้ ฉันทดสอบสิ่งนี้โดยปิดแบตเตอรี่แบบปรับได้ และตรวจสอบให้แน่ใจว่าไม่มีการเพิ่มประสิทธิภาพแบตเตอรี่ให้กับ Termux เช่นกัน

หลังจากที่คุณเสร็จสิ้นการทดสอบแล้ว เป็นไปได้ว่าการดำเนินการ sha256sum บางส่วนจะดำเนินต่อไปใน พื้นหลังยังคงอยู่ (และการกด Enter จะบังคับปิด Termux) ดังนั้นให้เปิด Termux อีกครั้งแล้วพิมพ์ กำลังติดตาม:

killall sha256sum

แม้ว่าข้อจำกัดดังกล่าวจะสมเหตุสมผลสำหรับบางแอป แต่แอปที่ผู้ใช้ระดับสูงอาจมีแนวโน้มที่จะใช้งานมากกว่า (เช่น Termux) จะต้องได้รับผลกระทบ นอกจากนี้ยังอาจส่งผลต่อแอปอื่นๆ ที่ผู้ใช้ระดับสูงใช้ด้วย เช่น Tasker เป็นข้อจำกัดที่ดูเหมือนจะยังไม่สามารถเอาชนะได้ และยังเพิ่มข้อจำกัดเพิ่มเติมให้กับแอปพื้นหลัง นอกเหนือจากข้อจำกัดที่เป็นกรรมสิทธิ์อื่นๆ ทั้งหมดที่ผู้ผลิตกำหนด ในหัวข้อปัญหา GitHub ที่กำลังดำเนินอยู่ ผู้ไม่เชื่อเรื่องพระเจ้าอพอลโลกล่าวถึงสิ่งต่อไปนี้เกี่ยวกับ logcat ที่ได้รับการส่งอีเมลถึงพวกเขา:

PhantomProcessRecord ที่ติดตามทั้งหมด 32 รายการเป็นของ com.wsandroid.suite และทุบตีของ termux เป็นหนึ่งในกระบวนการที่ถูกฆ่า ตามที่กล่าวไว้ข้างต้น การจำกัดกระบวนการ 32 กระบวนการนั้นมีไว้สำหรับแอปทั้งหมดรวมกัน"

น่าตลกดีที่ฉันทำการทดสอบแบบเดียวกันกับ Xiaomi 11T Pro ที่ใช้ Android 11 และยืนยันว่าไม่มีพฤติกรรมดังกล่าว บนอุปกรณ์นั้นในการกำหนดค่านั้น แม้ว่าอุปกรณ์ Xiaomi จะมีชื่อเสียงในด้านแอปพื้นหลังก็ตาม ข้อจำกัด นี่ถือเป็นนโยบายการจัดการแอปพลิเคชันเบื้องหลังที่เข้มงวดที่สุดอย่างหนึ่งที่นำมาใช้ในสมาร์ทโฟน Android ที่น่าแปลก เนื่องจากไม่มีทางแก้ไขได้ แม้กระทั่งบนอุปกรณ์ Xiaomi และอุปกรณ์ OnePlus ก็สามารถปิดการใช้งานได้ ที่สุด และสำหรับบางคน การปิดใช้งานการเพิ่มประสิทธิภาพแบตเตอรี่ทั้งหมดบนอุปกรณ์เหล่านั้นก็เพียงพอแล้วสำหรับพวกเขาที่จะมีความสุข ในทางตรงกันข้าม Phantom Process Killer ไม่สามารถปิดการใช้งานได้

หากคุณใช้ Termux สำหรับการดำเนินการบนอุปกรณ์จำนวนมากซึ่งต้องใช้กระบวนการเบื้องหลังจำนวนมาก อาจคุ้มค่าที่จะระงับการอัปเกรดในตอนนี้จนกว่าจะมีข้อมูลเพิ่มเติม หากคุณไม่ใช่ผู้ใช้ระดับสูง นี่อาจไม่ใช่สิ่งที่คุณต้องกังวลจริงๆ