ภาพรวมงานคือโครงสร้างพื้นฐานที่เปิดตัวใน Android 8.0 ที่รวม ภาพหน้าจอสำหรับภาพปกล่าสุด รวมถึงแพลตฟอร์มที่บันทึกไว้ จาก Window Manager ภาพขนาดย่อล่าสุด แสดงสถานะล่าสุดของงานใน คือมุมมอง "ล่าสุด"
เมื่อกิจกรรมเข้าสู่สถานะหยุด เครื่องมือจัดการหน้าต่างจะไม่ทำลาย ที่แสดงกิจกรรมตราบใดที่กิจกรรมนั้นอยู่บนงาน ถ้า กิจกรรมนี้จะต้องแสดงอีกครั้ง Window Manager จึงสามารถเริ่ม ภาพเคลื่อนไหวโดยไม่รอให้กิจกรรมวาดเฟรมแรกเสร็จ เช่น โมเดลนั้นสามารถใช้แพลตฟอร์มที่บันทึกไว้นี้
สถาปัตยกรรม
ทั้ง 2 แนวคิดของ "ภาพขนาดย่อล่าสุด" และ "พื้นผิวที่บันทึกไว้" จะรวมอยู่ด้วยกันกับ "งาน" สแนปชอต เมื่องานทำงานในพื้นหลัง ตัวจัดการหน้าต่างจะวางภาพหน้าจอ ของงานนี้ลงใน GraphicBuffer ตราบใดที่แอปชั้นบนสุด ของกิจกรรมของงานดังกล่าวจะอยู่ในหน่วยความจำ GraphicBuffer นี้จะถูกเก็บไว้ใน ความทรงจำ ทีนี้ เมื่อนำกิจกรรมเดิมมาไว้หน้าสุดอีกครั้ง หน้าต่าง ผู้จัดการจะสร้างหน้าต่างเริ่มต้น (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/+/main/services/core/java/com/android/server/wm/