ภาพรวมของงานคือโครงสร้างพื้นฐานที่เปิดตัวใน Android 8.0 ซึ่งรวมภาพหน้าจอสำหรับภาพขนาดย่อของรายการล่าสุดและพื้นผิวที่บันทึกไว้ จาก Window Manager ภาพขนาดย่อของรายการล่าสุดแสดงสถานะล่าสุดของงานในมุมมอง "ล่าสุด"
เมื่อกิจกรรมเข้าสู่สถานะหยุดทำงาน Window Manager จะไม่ทำลาย Surface ของกิจกรรมตราบใดที่กิจกรรมนั้นอยู่ด้านบนของงาน หากต้องแสดงกิจกรรมนี้อีกครั้ง Window Manager จะเริ่มภาพเคลื่อนไหวได้โดยไม่ต้องรอให้กิจกรรมวาดเฟรมแรกเสร็จ เนื่องจากใช้ Surface ที่บันทึกไว้นี้ได้
สถาปัตยกรรม
แนวคิด 2 อย่างของภาพขนาดย่อล่าสุดและพื้นผิวที่บันทึกไว้จะรวมเข้ากับภาพรวมของงาน เมื่องานเข้าสู่เบื้องหลัง Window Manager จะวางภาพหน้าจอ ของงานนี้ลงใน GraphicBuffer ตราบใดที่แอปของกิจกรรมที่อยู่ด้านบนสุดของงานยังคงอยู่ในหน่วยความจำ ระบบจะเก็บ GraphicBuffer นี้ไว้ในหน่วยความจำ ตอนนี้เมื่อนำกิจกรรมเดียวกันกลับมาไว้ด้านหน้าอีกครั้ง Window Manager จะสร้างหน้าต่างเริ่มต้น (TaskSnapshotSurface) และแนบ GraphicBuffer โดยไม่ต้องคัดลอกหน่วยความจำใดๆ ไปยังคิวบัฟเฟอร์ของหน้าต่างเริ่มต้น ทันทีที่กิจกรรมวาดเฟรมแรก หน้าต่างเริ่มต้นของภาพรวมงาน จะค่อยๆ จางหายไปอย่างราบรื่นเหมือนกับหน้าจอเริ่มต้นทั่วไป
นอกจากนี้ ระบบยังส่ง GraphicBuffer เดียวกันผ่าน Binder ไปยัง SystemUI เพื่อใช้ในการวาด สถานะตัวอย่างของงานในมุมมองล่าสุดด้วย เนื่องจากนี่เป็นเพียงการอ้างอิง บัฟเฟอร์ การส่งผ่าน Binder จึงใช้ทรัพยากรเพียงเล็กน้อย เมื่อ GraphicBuffer มาถึง SystemUI ระบบจะห่อหุ้มเป็นบิตแมปฮาร์ดแวร์ จากนั้น วาดลงบนหน้าจอโดยไม่ต้องอัปโหลดหน่วยความจำไปยังหน่วยความจำกราฟิก
ประโยชน์
สถาปัตยกรรมใหม่นี้มีประโยชน์หลัก 3 ประการ ดังนี้
- หากใช้ภาพรวมของงานเป็นหน้าต่างเริ่มต้น จะมีการเปลี่ยนฉากแบบครอสเฟดที่สวยงาม ระหว่างภาพรวมกับเนื้อหาจริง
- เมื่อวาดภาพรวมของงานใน SystemUI คุณจะทำได้โดยไม่ต้องคัดลอก ก่อนหน้านี้ต้องคัดลอกบิตแมปลงใน Ashmem แล้วจึงคัดลอกลงในหน่วยความจำกราฟิก เนื่องจากวิธีนี้จัดเก็บสแนปชอตไว้ในหน่วยความจำกราฟิกโดยตรง จึงไม่จำเป็นต้องคัดลอก
- สถานะที่คุณเห็นในแท็บ "ล่าสุด" จะตรงกับสถานะที่คุณเห็นครั้งแรกเสมอเมื่อ เปิดแอปอีกครั้ง การมีบัฟเฟอร์เดียวกันที่นี่จะช่วยประหยัดหน่วยความจำได้มากด้วย ด้วยเหตุนี้เอง ตอนนี้ "ล่าสุด" จึงแสดงรูปภาพเหล่านี้ได้แบบเต็มความละเอียด ก่อนหน้านี้ ระบบจะลดอัตราการสุ่มตัวอย่างลง 64% เพื่อประหยัดหน่วยความจำ
การใช้งาน
ฟีเจอร์นี้มีอยู่ในแพลตฟอร์ม Android เท่านั้น ไม่จำเป็นต้องผสานรวมและไม่รองรับการปรับแต่ง อย่างไรก็ตาม ผู้ผลิตอุปกรณ์สามารถ ปิดใช้ฟีเจอร์ภาพรวมของงานทั้งหมดได้
หากต้องการปิดใช้ฟีเจอร์นี้ ให้แก้ไขฟังก์ชันต่อไปนี้
frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215
โปรดทราบว่าหากปิดใช้ฟีเจอร์นี้ มุมมอง "ล่าสุด" จะไม่แสดงภาพขนาดย่อใดๆ
สแนปชอตความละเอียดสูงและความละเอียดต่ำ
ระบบจะเขียนภาพรวมของงานลงในดิสก์ใน 2 ระดับ เมื่อกู้คืนสแนปชอตของงาน จากดิสก์ ระบบจะอ่านสแนปชอตความละเอียดต่ำก่อน แล้วแทนที่ด้วย สแนปชอตความละเอียดสูง การเพิ่มประสิทธิภาพนี้จะช่วยลดเวลาในการโหลดรูปภาพ มิฉะนั้นอาจเกิดความล่าช้าเล็กน้อยเมื่ออ่านไฟล์สแนปชอตจากดิสก์ และผู้ใช้จะเห็นการ์ดงานว่างเปล่าจนกว่ารูปภาพจะพร้อมใช้งาน คุณกำหนดค่าสเกลได้ในไฟล์กำหนดค่าการวางซ้อนของอุปกรณ์overlay/frameworks/base/core/res/res/values/config.xml
โดยการตั้งค่า
config_highResTaskSnapshotScale
และ
config_lowResTaskSnapshotScale
โดยค่าเริ่มต้น ระบบจะตั้งค่าเป็น 1.0
และ 0.5 ตามลำดับ ปิดใช้สแนปชอตความละเอียดต่ำโดยตั้งค่า
config_lowResTaskSnapshotScale
เป็น 0.0
ตัวอย่างและแหล่งที่มา
ค้นหาโค้ดที่เหลือของฟีเจอร์นี้ภายในไฟล์ TaskSnapshot* ในตำแหน่งต่อไปนี้
frameworks/base/+/android16-release/services/core/java/com/android/server/wm/