แพลตฟอร์ม Android 16 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ
การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้มีผลกับแอปทั้งหมดเมื่อทำงานบน Android 16 ไม่ว่าจะมี targetSdkVersion
หรือไม่ก็ตาม คุณควรทดสอบแอปแล้วแก้ไขแอปตามที่จำเป็นเพื่อรองรับการเปลี่ยนแปลงเหล่านี้ (หากมี)
โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปที่กําหนดเป้าหมายเป็น Android 16 เท่านั้นด้วย
ฟังก์ชันหลัก
Android 16 มีการเปลี่ยนแปลงต่อไปนี้ซึ่งแก้ไขหรือขยายความสามารถหลักต่างๆ ของระบบ Android
การเพิ่มประสิทธิภาพโควต้า JobScheduler
ตั้งแต่ Android 16 เป็นต้นไป เราจะปรับโควต้ารันไทม์ของงานแบบปกติและแบบเร่งด่วนตามปัจจัยต่อไปนี้
- บัคเก็ตสแตนด์บายของแอปที่แอปพลิเคชันอยู่: ใน Android 16 ระบบจะเริ่มบังคับใช้บัคเก็ตสแตนด์บายที่ใช้งานอยู่ด้วยโควต้ารันไทม์ที่เพียงพอ
- หากงานเริ่มดำเนินการขณะที่แอปอยู่ในสถานะบนสุด: ใน Android 16 งานเริ่มต้นขณะที่ผู้ใช้มองเห็นแอปและดำเนินการต่อหลังจากแอปมองไม่เห็นจะเป็นไปตามโควต้ารันไทม์ของงาน
- หากงานกำลังดำเนินการขณะเรียกใช้บริการที่ทำงานอยู่เบื้องหน้า: ใน Android 16 งานที่กำลังดำเนินการพร้อมกันกับบริการที่ทำงานอยู่เบื้องหน้าจะเป็นไปตามโควต้ารันไทม์ของงาน หากคุณใช้ประโยชน์จากงานสำหรับการโอนข้อมูลที่เริ่มต้นโดยผู้ใช้ ให้พิจารณาใช้งานการโอนข้อมูลที่เริ่มต้นโดยผู้ใช้แทน
การเปลี่ยนแปลงนี้จะส่งผลต่องานที่กําหนดเวลาไว้โดยใช้ WorkManager, JobScheduler และ DownloadManager หากต้องการแก้ไขข้อบกพร่องว่าเหตุใดงานจึงหยุดทำงาน เราขอแนะนำให้บันทึกสาเหตุที่งานหยุดทำงานโดยเรียกใช้ WorkInfo.getStopReason()
(สำหรับงาน JobScheduler ให้เรียกใช้ JobParameters.getStopReason()
)
ดูข้อมูลเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติแนะนำเพื่อเพิ่มประสิทธิภาพแบตเตอรี่ได้ที่คำแนะนำเกี่ยวกับเพิ่มประสิทธิภาพการใช้แบตเตอรี่สำหรับ API การจัดตารางงาน
นอกจากนี้ เราขอแนะนําให้ใช้ประโยชน์จาก JobScheduler#getPendingJobReasonsHistory
API ใหม่ที่เปิดตัวใน Android 16 เพื่อทําความเข้าใจสาเหตุที่การทํางานไม่ทํางาน
การทดสอบ
หากต้องการทดสอบลักษณะการทํางานของแอป คุณสามารถเปิดใช้การลบล้างการเพิ่มประสิทธิภาพโควต้างานบางอย่างได้ ตราบใดที่แอปทํางานบนอุปกรณ์ Android 16
หากต้องการปิดใช้การบังคับใช้ "สถานะบนสุดจะยึดตามโควต้ารันไทม์ของงาน" ให้เรียกใช้คำสั่ง adb
ต่อไปนี้
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
หากต้องการปิดใช้การบังคับใช้ "งานที่ดำเนินการอยู่ขณะที่บริการที่ทำงานอยู่เบื้องหน้าจะยึดตามโควต้ารันไทม์ของงาน" ให้เรียกใช้คำสั่งadb
ต่อไปนี้
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
หากต้องการทดสอบลักษณะการทํางานของที่เก็บข้อมูลสแตนด์บายของแอปบางรายการ ให้ตั้งค่าที่เก็บข้อมูลสแตนด์บายของแอปโดยใช้คําสั่ง adb
ต่อไปนี้
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
หากต้องการทำความเข้าใจที่เก็บข้อมูลสแตนด์บายของแอปที่คุณใช้อยู่ ให้ดูที่เก็บข้อมูลสแตนด์บายของแอปโดยใช้คำสั่ง adb
ต่อไปนี้
adb shell am get-standby-bucket APP_PACKAGE_NAME
เลิกใช้งาน JobInfo#setImportantWhileForeground อย่างสมบูรณ์
วิธีการ JobInfo.Builder#setImportantWhileForeground(boolean)
จะระบุความสำคัญของงานขณะที่แอปกำหนดเวลาอยู่เบื้องหน้าหรือเมื่อได้รับการยกเว้นจากข้อจำกัดของเบื้องหลังชั่วคราว
เราเลิกใช้งานเมธอดนี้ตั้งแต่ Android 12 (API ระดับ 31) ตั้งแต่ Android 16 เป็นต้นไป วิธีการนี้จะใช้งานไม่ได้อีกต่อไป และระบบจะไม่สนใจการเรียกใช้เมธอดนี้
การนําฟังก์ชันการทำงานนี้ออกจะมีผลกับJobInfo#isImportantWhileForeground()
ด้วย ตั้งแต่ Android 16 เป็นต้นไป หากมีการเรียกใช้เมธอด เมธอดจะแสดงผลลัพธ์เป็น false
ประสบการณ์ของผู้ใช้และ UI ของระบบ
Android 16 มีการเปลี่ยนแปลงต่อไปนี้ซึ่งมีจุดประสงค์เพื่อมอบประสบการณ์การใช้งานที่สม่ำเสมอและใช้งานง่ายยิ่งขึ้นแก่ผู้ใช้
การเลิกใช้งานการประกาศการช่วยเหลือพิเศษที่รบกวน
Android 16 เลิกใช้งานการประกาศการช่วยเหลือพิเศษ ซึ่งมีลักษณะการใช้งาน announceForAccessibility
หรือการส่งเหตุการณ์การช่วยเหลือพิเศษ TYPE_ANNOUNCEMENT
การดำเนินการเหล่านี้อาจทำให้ผู้ใช้ TalkBack และโปรแกรมอ่านหน้าจอของ Android ได้รับประสบการณ์การใช้งานที่ไม่สอดคล้องกัน และทางเลือกอื่นๆ จะตอบสนองความต้องการของผู้ใช้ได้หลากหลายมากขึ้นในเทคโนโลยีความช่วยเหลือพิเศษต่างๆ ของ Android
ตัวอย่างทางเลือกมีดังนี้
- สำหรับการเปลี่ยนแปลง UI ที่สำคัญ เช่น การเปลี่ยนแปลงหน้าต่าง ให้ใช้
Activity.setTitle(CharSequence)
และsetAccessibilityPaneTitle(java.lang.CharSequence)
ในโหมดเขียน ให้ใช้Modifier.semantics { paneTitle = "paneTitle" }
- หากต้องการแจ้งให้ผู้ใช้ทราบถึงการเปลี่ยนแปลง UI ที่สำคัญ ให้ใช้
setAccessibilityLiveRegion(int)
ในโหมดเขียน ให้ใช้Modifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
คุณควรใช้ฟีเจอร์เหล่านี้อย่างจำกัดเนื่องจากอาจสร้างประกาศทุกครั้งที่มีการอัปเดตมุมมอง - หากต้องการแจ้งให้ผู้ใช้ทราบเกี่ยวกับข้อผิดพลาด ให้ส่ง
AccessibilityEvent
ประเภทAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
และตั้งค่าAccessibilityNodeInfo#setError(CharSequence)
หรือใช้TextView#setError(CharSequence)
เอกสารอ้างอิงสําหรับ announceForAccessibility
API ที่เลิกใช้งานแล้วมีรายละเอียดเพิ่มเติมเกี่ยวกับทางเลือกที่แนะนํา