Android 16 ก็มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณเช่นเดียวกับรุ่นก่อนหน้า การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้มีผลกับแอปที่กำหนดเป้าหมายเป็น Android 16 ขึ้นไปเท่านั้น หากแอปกำหนดเป้าหมายเป็น Android 16 ขึ้นไป คุณควรแก้ไขแอปให้รองรับลักษณะการทำงานเหล่านี้ (หากมี)
นอกจากนี้ โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปทั้งหมดที่ทำงานบน Android 16 โดยไม่คำนึงถึง targetSdkVersion
ของแอป
ประสบการณ์ของผู้ใช้และ UI ของระบบ
Android 16 มีการเปลี่ยนแปลงต่อไปนี้ซึ่งมีจุดประสงค์เพื่อสร้างประสบการณ์การใช้งานที่สม่ำเสมอและใช้งานง่ายยิ่งขึ้น
ตัวเลือกการไม่ใช้แบบเต็มหน้าจอจะหยุดให้บริการ
Android 15 บังคับใช้การแสดงผลแบบเต็มหน้าจอสำหรับแอปที่กำหนดเป้าหมายเป็น Android 15 (API ระดับ 35) แต่แอปของคุณเลือกไม่ใช้ได้โดยการตั้งค่า R.attr#windowOptOutEdgeToEdgeEnforcement
เป็น true
สำหรับแอปที่กําหนดเป้าหมายเป็น Android 16 ระบบจะเลิกใช้งานและปิดใช้ R.attr#windowOptOutEdgeToEdgeEnforcement
และแอปของคุณจะเลือกไม่ใช้แบบไร้ขอบไม่ได้
สำหรับการทดสอบใน Android 16 Beta 2 โปรดตรวจสอบว่าแอปรองรับการแสดงผลแบบเต็มหน้าจอและนำการใช้ R.attr#windowOptOutEdgeToEdgeEnforcement
ออก หากต้องการรองรับการแสดงผลแบบเต็มหน้าจอ โปรดดูคำแนะนำสำหรับการเขียนและมุมมอง โปรดแจ้งให้เราทราบเกี่ยวกับข้อกังวลในเครื่องมือติดตามปัญหาในหน้าความคิดเห็น
ต้องย้ายข้อมูลหรือเลือกไม่ใช้ฟีเจอร์การย้อนกลับแบบคาดคะเน
สําหรับแอปที่กําหนดเป้าหมายเป็น Android 16 ขึ้นไปและทํางานบนอุปกรณ์ Android 16 ขึ้นไป ระบบจะเปิดใช้ภาพเคลื่อนไหวการกลับไปยังระบบแบบคาดการณ์ (กลับไปยังหน้าจอหลัก ข้ามงาน และข้ามกิจกรรม) โดยค่าเริ่มต้น
นอกจากนี้ ระบบจะไม่เรียกใช้ onBackPressed
และจะไม่ส่ง KeyEvent.KEYCODE_BACK
อีกต่อไป
หากแอปของคุณขัดจังหวะเหตุการณ์ "กลับ" และคุณยังไม่ได้ย้ายข้อมูลไปยัง "กลับ" แบบคาดการณ์ ให้อัปเดตแอปเพื่อใช้ API การนําทางกลับที่รองรับ หรือเลือกไม่ใช้ชั่วคราวโดยตั้งค่าแอตทริบิวต์ android:enableOnBackInvokedCallback
เป็น false
ในแท็ก <application>
หรือ <activity>
ของไฟล์ AndroidManifest.xml
ของแอป
เลิกใช้งานและปิดใช้ Elegant Font API
แอปที่กำหนดเป้าหมายเป็น Android 15 (API ระดับ 35) จะมีการตั้งค่าแอตทริบิวต์ elegantTextHeight
TextView
เป็น true
โดยค่าเริ่มต้น ซึ่งจะแทนที่แบบอักษรแบบกะทัดรัดด้วยแบบอักษรที่อ่านง่ายกว่ามาก คุณ override การตั้งค่านี้ได้โดยตั้งค่าแอตทริบิวต์ elegantTextHeight
เป็น false
Android 16 เลิกใช้งานแอตทริบิวต์ elegantTextHeight
และระบบจะไม่สนใจแอตทริบิวต์นี้เมื่อแอปกำหนดเป้าหมายเป็น Android 16 เราจะหยุดให้บริการ "แบบอักษร UI" ที่ควบคุมโดย API เหล่านี้ ดังนั้นคุณควรปรับเลย์เอาต์เพื่อให้การแสดงผลข้อความในภาษาอาหรับ ลาว เมียนมา ทมิฬ คุชราต กันนาดา มาลายาลัม โอเดีย เตลูกู หรือไทยสอดคล้องกันและใช้งานได้ในอนาคต
![](https://developer.android.google.cn/static/about/versions/15/images/elegant-text-height-before.png?authuser=002&hl=th)
elegantTextHeight
สําหรับแอปที่กําหนดเป้าหมายเป็น Android
14 (API ระดับ 34) และต่ำกว่า หรือสําหรับแอปที่กําหนดเป้าหมายเป็น Android 15 (API ระดับ 35) ที่ลบล้างค่าเริ่มต้นโดยการตั้งค่าแอตทริบิวต์ elegantTextHeight
เป็น false
![](https://developer.android.google.cn/static/about/versions/15/images/elegant-text-height-after.png?authuser=002&hl=th)
elegantTextHeight
สําหรับแอปที่กําหนดเป้าหมายเป็น Android 16 หรือสําหรับแอปที่กําหนดเป้าหมายเป็น Android 15 (API ระดับ 35) ที่ไม่ได้ลบล้างค่าเริ่มต้นโดยการตั้งค่าแอตทริบิวต์ elegantTextHeight
เป็น false
ฟังก์ชันหลัก
Android 16 มีการเปลี่ยนแปลงต่อไปนี้ซึ่งแก้ไขหรือขยายความสามารถหลักต่างๆ ของระบบ Android
การเพิ่มประสิทธิภาพการจัดกำหนดเวลางานแบบอัตราคงที่
ก่อนที่จะกำหนดเป้าหมายเป็น Android 16 เมื่อ scheduleAtFixedRate
พลาดการเรียกใช้งานเนื่องจากอยู่นอกวงจรการประมวลผลที่ถูกต้อง การเรียกใช้ทั้งหมดที่พลาดไปจะดำเนินการทันทีเมื่อแอปกลับไปยังวงจรการประมวลผลที่ถูกต้อง
เมื่อกำหนดเป้าหมายเป็น Android 16 ระบบจะเรียกใช้scheduleAtFixedRate
ที่พลาดไปไม่เกิน1 ครั้งทันทีเมื่อแอปกลับมาอยู่ในวงจรที่ถูกต้อง การเปลี่ยนแปลงลักษณะการทำงานนี้คาดว่าจะช่วยปรับปรุงประสิทธิภาพของแอป ทดสอบลักษณะการทำงานนี้ในแอปเพื่อดูว่าแอปได้รับผลกระทบหรือไม่
นอกจากนี้ คุณยังทดสอบโดยใช้เฟรมเวิร์กความเข้ากันได้ของแอปและเปิดใช้ Flag STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS
compat ได้ด้วย
หน้าจอขนาดใหญ่และรูปแบบของอุปกรณ์
Android 16 มีการเปลี่ยนแปลงต่อไปนี้สำหรับแอปเมื่อแสดงบนอุปกรณ์หน้าจอขนาดใหญ่
เลย์เอาต์ที่ปรับเปลี่ยนได้
เนื่องจากตอนนี้แอป Android ทำงานได้ในอุปกรณ์ที่หลากหลาย (เช่น โทรศัพท์ แท็บเล็ต อุปกรณ์แบบพับได้ และเดสก์ท็อป) และโหมดหน้าต่างบนหน้าจอขนาดใหญ่ (เช่น หน้าจอแยกและหน้าต่างเดสก์ท็อป) นักพัฒนาแอปจึงควรสร้างแอป Android ที่ปรับให้เข้ากับหน้าจอและขนาดหน้าต่างได้ทุกขนาด ไม่ว่าจะวางแนวอุปกรณ์อย่างไรก็ตาม กระบวนทัศน์ต่างๆ เช่น การจํากัดการวางแนวและการปรับขนาดใหม่นั้นจํากัดเกินไปในยุคที่อุปกรณ์มีหลากหลายในปัจจุบัน
ไม่สนใจข้อจำกัดด้านการวางแนว ความสามารถในการปรับขนาด และอัตราส่วนการแสดงผล
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 16 นั้น Android 16 มีการเปลี่ยนแปลงวิธีจัดการข้อจำกัดด้านการวางแนว ความสามารถในการปรับขนาด และอัตราส่วนภาพ บนจอแสดงผลที่มีความกว้างน้อยที่สุดตั้งแต่ 600dp ขึ้นไป ข้อจํากัดนี้จะไม่มีผลอีกต่อไป นอกจากนี้ แอปยังแสดงเต็มหน้าต่างการแสดงผล โดยไม่คำนึงถึงสัดส่วนการแสดงผลหรือการวางแนวที่ผู้ใช้ต้องการ และจะไม่ใช้การครอบตัดเสา
การเปลี่ยนแปลงนี้จะเปิดตัวลักษณะการทํางานแบบใหม่ของแพลตฟอร์ม Android กําลังเปลี่ยนไปใช้รูปแบบที่คาดหวังให้แอปปรับเปลี่ยนตามการวางแนว ขนาดการแสดงผล และสัดส่วนภาพต่างๆ ข้อจำกัด เช่น การวางแนวแบบคงที่หรือความสามารถในการปรับขนาดที่จำกัด จะขัดขวางการปรับแอปให้เข้ากับอุปกรณ์ ดังนั้นเราขอแนะนำให้ทำให้แอปเป็นแบบปรับขนาดได้เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีที่สุด
นอกจากนี้ คุณยังทดสอบลักษณะการทํางานนี้ได้โดยใช้เฟรมเวิร์กความเข้ากันได้ของแอปและเปิดใช้ Flag UNIVERSAL_RESIZABLE_BY_DEFAULT
compat
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบที่พบได้ทั่วไป
การละเว้นข้อจำกัดด้านการวางแนว การปรับขนาด และอัตราส่วนภาพอาจส่งผลต่อ UI ของแอปในอุปกรณ์บางรุ่น โดยเฉพาะองค์ประกอบที่ออกแบบมาสำหรับเลย์เอาต์ขนาดเล็กซึ่งล็อกไว้ในแนวตั้ง เช่น ปัญหาเกี่ยวกับเลย์เอาต์ที่ยืดออก รวมถึงภาพเคลื่อนไหวและคอมโพเนนต์ที่อยู่นอกหน้าจอ การคาดเดาเกี่ยวกับสัดส่วนการแสดงผลหรือการวางแนวอาจทำให้เกิดปัญหาด้านภาพในแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีหลีกเลี่ยงปัญหาดังกล่าวและปรับปรุงลักษณะการทํางานแบบปรับเปลี่ยนของแอป
การเปิดใช้การเปลี่ยนอุปกรณ์จะส่งผลให้มีการสร้างกิจกรรมใหม่มากขึ้น ซึ่งอาจส่งผลให้สถานะผู้ใช้สูญหายหากไม่เก็บรักษาอย่างเหมาะสม ดูวิธีบันทึกสถานะ UI อย่างถูกต้องในบันทึกสถานะ UI
รายละเอียดการติดตั้งใช้งาน
ระบบจะละเว้นแอตทริบิวต์ไฟล์ Manifest และ API รันไทม์ต่อไปนี้ในอุปกรณ์ที่มีหน้าจอขนาดใหญ่ในโหมดเต็มหน้าจอและโหมดหลายหน้าต่าง
screenOrientation
resizableActivity
minAspectRatio
maxAspectRatio
setRequestedOrientation()
getRequestedOrientation()
ระบบจะละเว้นค่าต่อไปนี้สำหรับ screenOrientation
, setRequestedOrientation()
และ getRequestedOrientation()
portrait
reversePortrait
sensorPortrait
userPortrait
landscape
reverseLandscape
sensorLandscape
userLandscape
android:resizeableActivity="false"
,
android:minAspectRatio
และ android:maxAspectRatio
ไม่มีผลต่อความสามารถในการปรับขนาดของการแสดงผล
สําหรับแอปที่กําหนดเป้าหมายเป็น Android 16 ระบบจะไม่สนใจข้อจํากัดด้านการวางแนวแอป ความสามารถในการปรับขนาด และอัตราส่วนภาพบนหน้าจอขนาดใหญ่โดยค่าเริ่มต้น แต่แอปทุกแอปที่ยังไม่พร้อมใช้งานอย่างเต็มรูปแบบสามารถลบล้างลักษณะการทํางานนี้ชั่วคราวได้โดยการเลือกไม่ใช้ (ซึ่งจะส่งผลให้แอปมีพฤติกรรมแบบเดิมซึ่งแสดงในโหมดความเข้ากันได้)
ข้อยกเว้น
ข้อจำกัดด้านการวางแนว ความสามารถในการปรับขนาด และอัตราส่วนการแสดงผลของ Android 16 จะไม่มีผลในกรณีต่อไปนี้
- เกม (ตาม Flag
android:appCategory
) - ผู้ใช้เลือกใช้ลักษณะการทำงานเริ่มต้นของแอปในการตั้งค่าสัดส่วนภาพของอุปกรณ์อย่างชัดเจน
- หน้าจอที่มีขนาดเล็กกว่า
sw600dp
เลือกไม่ใช้ชั่วคราว
หากต้องการเลือกไม่ใช้กิจกรรมที่เฉพาะเจาะจง ให้ประกาศPROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY
พร็อพเพอร์ตี้ไฟล์ Manifest ดังนี้
<activity ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
...
</activity>
หากแอปของคุณมีชิ้นส่วนจำนวนมากที่ไม่พร้อมใช้งานสำหรับ Android 16 คุณสามารถเลือกไม่ใช้โดยสมบูรณ์ได้โดยใช้พร็อพเพอร์ตี้เดียวกันนี้ที่ระดับแอปพลิเคชัน ดังนี้
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
สุขภาพและการออกกำลังกาย
Android 16 มีการเปลี่ยนแปลงต่อไปนี้ที่เกี่ยวข้องกับข้อมูลสุขภาพและการออกกำลังกาย
สิทธิ์ด้านสุขภาพและการออกกำลังกาย
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 16 ขึ้นไป สิทธิ์ BODY_SENSORS
กำลังจะเปลี่ยนเป็นสิทธิ์แบบละเอียดภายใต้ android.permissions.health
ซึ่ง Health Connect จะใช้ด้วย API ที่เคยต้องใช้ BODY_SENSORS
หรือ
BODY_SENSORS_BACKGROUND
จะต้องเปลี่ยนเป็นสิทธิ์ android.permissions.health
ที่เกี่ยวข้อง ซึ่งจะส่งผลต่อประเภทข้อมูล, API และประเภทบริการที่ทำงานอยู่เบื้องหน้าต่อไปนี้
HEART_RATE_BPM
จากบริการสุขภาพของ WearSensor.TYPE_HEART_RATE
จากเครื่องมือจัดการเซ็นเซอร์ของ AndroidheartRateAccuracy
และheartRateBpm
จาก WearProtoLayout
FOREGROUND_SERVICE_TYPE_HEALTH
ในกรณีที่ต้องใช้สิทธิ์android.permission.health
ที่เกี่ยวข้องแทนBODY_SENSORS
หากแอปของคุณใช้ API เหล่านี้ ตอนนี้แอปควรขอสิทธิ์แบบละเอียดต่อไปนี้
- สําหรับการตรวจสอบอัตราการเต้นของหัวใจ, SpO2 หรืออุณหภูมิผิวขณะใช้งาน ให้ขอสิทธิ์แบบละเอียดในส่วน
android.permissions.health
เช่นREAD_HEART_RATE
แทนBODY_SENSORS
- สําหรับสิทธิ์เข้าถึงเซ็นเซอร์ในเบื้องหลัง ให้ขอ
READ_HEALTH_DATA_IN_BACKGROUND
แทนBODY_SENSORS_BACKGROUND
สิทธิ์เหล่านี้เหมือนกับสิทธิ์ที่ปกป้องการเข้าถึงการอ่านข้อมูลจาก Health Connect ซึ่งเป็นที่เก็บข้อมูล Android สำหรับข้อมูลสุขภาพ การออกกำลังกาย และคุณภาพชีวิต