การเปลี่ยนแปลงลักษณะการทํางาน: แอปทั้งหมด

แพลตฟอร์ม Android 14 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปทั้งหมดเมื่อแอปทำงานบน Android 14 ไม่ว่าtargetSdkVersion จะเป็นเวอร์ชันใดก็ตาม คุณควร ทดสอบแอป แล้วแก้ไขตามที่จำเป็นเพื่อรองรับฟีเจอร์เหล่านี้อย่างเหมาะสมในกรณีที่ เกี่ยวข้อง

อย่าลืมตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่มีผลกับแอปที่กำหนดเป้าหมายเป็น Android 14 เท่านั้นด้วย

ฟังก์ชันหลัก

ระบบจะปฏิเสธการตั้งเวลาปลุกในเวลาที่แน่นอนโดยค่าเริ่มต้น

การปลุกในเวลาที่แน่นอนมีไว้สำหรับการแจ้งเตือนที่ผู้ใช้ตั้งใจให้แสดง หรือสําหรับการดําเนินการที่จำเป็นต้องเกิดขึ้นในเวลาที่แน่นอน ตั้งแต่ Android 14 เป็นต้นไป ระบบจะไม่ให้สิทธิ์ SCHEDULE_EXACT_ALARM ล่วงหน้าแก่แอปที่ติดตั้งใหม่ส่วนใหญ่ซึ่งกำหนดเป้าหมายเป็น Android 13 ขึ้นไปอีกต่อไป โดยระบบจะปฏิเสธสิทธิ์ดังกล่าวโดยค่าเริ่มต้น

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงสิทธิ์ในการตั้งเวลาการปลุกที่แน่นอน

ระบบจะจัดคิวการออกอากาศที่ลงทะเบียนตามบริบทขณะที่แคชแอป

ใน Android 14 ระบบจะดำเนินการต่อไปนี้ได้ วางการออกอากาศที่ลงทะเบียนตามบริบทไว้ในคิวขณะที่แอป อยู่ในสถานะแคช ส่วนนี้คล้ายกับการจัดคิว ลักษณะการทำงานที่ Android 12 (API ระดับ 31) นำมาใช้กับ Binder ที่ไม่พร้อมกัน ธุรกรรม การออกอากาศที่ประกาศในไฟล์ Manifest ไม่ได้อยู่ในคิวและจะนำแอปออก จากสถานะแคชสำหรับส่งการออกอากาศ

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

แอปจะสิ้นสุดได้เฉพาะกระบวนการเบื้องหลังของตัวเองเท่านั้น

ตั้งแต่ Android 14 เมื่อแอปเรียกใช้ killBackgroundProcesses() API จะยุติเฉพาะกระบวนการเบื้องหลังของแอปของคุณเองเท่านั้น

หากคุณส่งชื่อแพ็กเกจของแอปอื่น เมธอดนี้จะไม่มีผลกับกระบวนการเบื้องหลังของแอปนั้น และข้อความต่อไปนี้จะปรากฏใน Logcat

Invalid packageName: com.example.anotherapp

แอปของคุณไม่ควรใช้ killBackgroundProcesses() API หรือพยายามที่จะส่งผลต่อวงจรกระบวนการของแอปอื่นๆ แม้ว่าจะใช้ในระบบปฏิบัติการเวอร์ชันเก่าก็ตาม Android ออกแบบมาให้เก็บแอปที่แคชไว้ไว้ในเบื้องหลังและปิดแอปเหล่านั้นโดยอัตโนมัติเมื่อระบบต้องการหน่วยความจำ หากแอปของคุณปิดแอปอื่นๆ โดยไม่จำเป็น อาจทำให้ประสิทธิภาพของระบบลดลงและทำให้แบตเตอรี่หมดเร็วขึ้นเนื่องจากต้องรีสตาร์ทแอปเหล่านั้นอย่างเต็มรูปแบบในภายหลัง ซึ่งต้องใช้ทรัพยากรมากกว่าการกลับมาทำงานของแอปที่แคชไว้อยู่แล้ว

ตั้งค่า MTU เป็น 517 สำหรับไคลเอ็นต์ GATT รายแรกที่ขอ MTU

从 Android 14 开始,Android 蓝牙堆栈会更严格地遵循 蓝牙核心规范 5.2 版,并在第一个 GATT 客户端使用 BluetoothGatt#requestMtu(int) API 请求 MTU 时将 BLE ATT MTU 请求设为 517 字节,并忽略该 ACL 连接上的所有后续 MTU 请求。

如需解决此更改并使您的应用更为稳健,请考虑以下选项:

  • 您的外围设备应使用外围设备可以容纳的合理值来响应 Android 设备的 MTU 请求。最终协商的值将是 Android 请求的值和远程提供的值(例如 min(517, remoteMtu))的较小值
    • 实现此修复程序可能需要更新外围设备的固件
  • 或者,您也可以根据外围设备的已知支持值与收到的 MTU 更改值之间的最小值来限制 GATT 特征写入
    • 提醒您,应将标头的支持大小减小 5 个字节
    • 例如:arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

เหตุผลใหม่ที่แอปอาจอยู่ในที่เก็บข้อมูลสแตนด์บายที่ถูกจำกัด

Android 14 เพิ่มเหตุผลใหม่ที่แอปอาจถูกนำไปไว้ในที่เก็บข้อมูลสแตนด์บายที่ถูกจำกัด งานของแอปทริกเกอร์ข้อผิดพลาด ANR หลายครั้งเนื่องจากหมดเวลาของเมธอด onStartJob, onStopJob หรือ onBind (ดูJobScheduler เสริมการทำงานแบบคอลแบ็กและเครือข่ายสำหรับการเปลี่ยนแปลงใน onStartJob และ onStopJob)

หากต้องการติดตามว่าแอปเข้าสู่ที่เก็บข้อมูลสแตนด์บายที่จํากัดหรือไม่ เราขอแนะนําให้บันทึกด้วย API UsageStatsManager.getAppStandbyBucket() เมื่อเรียกใช้งาน หรือ UsageStatsManager.queryEventsForSelf() เมื่อเริ่มต้นแอป

mlock จำกัดไว้ที่ 64 KB

ใน Android 14 (API ระดับ 34) ขึ้นไป แพลตฟอร์มจะลดหน่วยความจําสูงสุดที่ล็อกได้โดยใช้ mlock() เหลือ 64 KB ต่อกระบวนการ ในเวอร์ชันก่อนหน้านี้ ขีดจำกัดคือ 64 MB ต่อกระบวนการ ข้อจำกัดนี้จะช่วยจัดการหน่วยความจำในแอปและระบบได้ดียิ่งขึ้น Android 14 เพิ่มการทดสอบ CTS ใหม่สำหรับขีดจำกัด mlock() ใหม่ในอุปกรณ์ที่เข้ากันได้ เพื่อให้อุปกรณ์ต่างๆ ทำงานร่วมกันได้อย่างสอดคล้องกันมากขึ้น

ระบบบังคับใช้การใช้ทรัพยากรของแอปที่แคชไว้

ตามการออกแบบ กระบวนการของแอปจะอยู่ในสถานะแคชเมื่อย้ายไปยังเบื้องหลังและไม่มีคอมโพเนนต์กระบวนการแอปอื่นๆ ทำงานอยู่ กระบวนการของแอปดังกล่าวอาจถูกหยุดเนื่องจากหน่วยความจําของระบบมีไม่เพียงพอ งานใดก็ตามที่อินสแตนซ์ Activity ดำเนินการหลังจากเรียกใช้และได้ผลลัพธ์จากเมธอด onStop() ขณะอยู่ในสถานะนี้จะไม่เสถียรและไม่แนะนำอย่างยิ่ง

Android 14 เปิดตัวการออกแบบนี้อย่างสม่ำเสมอและบังคับใช้ หลังจากกระบวนการของแอปเข้าสู่สถานะแคชไม่นาน ระบบจะไม่อนุญาตให้ทำงานในเบื้องหลังจนกว่าคอมโพเนนต์กระบวนการจะเข้าสู่สถานะ "ทำงานอยู่" ของวงจรอีกครั้ง

แอปที่ใช้ API วงจรชีวิตของเฟรมเวิร์กทั่วไป เช่น services, JobScheduler และ Jetpack WorkManager ไม่ควรได้รับผลกระทบจากการเปลี่ยนแปลงเหล่านี้

ประสบการณ์ของผู้ใช้

การเปลี่ยนแปลงวิธีที่ผู้ใช้ได้รับประสบการณ์การแจ้งเตือนที่ปิดไม่ได้

หากแอปแสดงการแจ้งเตือนที่ไม่สามารถปิดได้ในเบื้องหน้าต่อผู้ใช้ Android 14 ได้เปลี่ยนแปลงลักษณะการทํางานเพื่อให้ผู้ใช้ปิดการแจ้งเตือนดังกล่าวได้

การเปลี่ยนแปลงนี้มีผลกับแอปที่ป้องกันไม่ให้ผู้ใช้ปิดการแจ้งเตือนที่แสดงอยู่เบื้องหน้าโดยการตั้งค่า Notification.FLAG_ONGOING_EVENT ผ่าน Notification.Builder#setOngoing(true) หรือ NotificationCompat.Builder#setOngoing(true) ลักษณะการทำงานของ FLAG_ONGOING_EVENT ได้ทำการเปลี่ยนแปลงเพื่อแสดงการแจ้งเตือนดังกล่าวจริงๆ โดยผู้ใช้ปิดได้

คุณจะยังคงปิดการแจ้งเตือนประเภทนี้ไม่ได้ในกรณีต่อไปนี้ เงื่อนไข:

  • เมื่อโทรศัพท์ล็อกอยู่
  • หากผู้ใช้เลือกการดำเนินการแจ้งเตือนล้างทั้งหมด (ซึ่งช่วย การปิดโดยไม่ตั้งใจ)

นอกจากนี้ ลักษณะการทำงานแบบใหม่นี้จะไม่มีผลกับการแจ้งเตือนใน กรณีการใช้งานต่อไปนี้

  • การแจ้งเตือน CallStyle รายการ
  • เครื่องมือควบคุมนโยบายด้านอุปกรณ์ (DPC) และแพ็กเกจสนับสนุนสำหรับองค์กร
  • การแจ้งเตือนสื่อ
  • แพ็กเกจตัวเลือกการค้นหาเริ่มต้น

ข้อมูลความปลอดภัยของข้อมูลจะมองเห็นได้ชัดเจนยิ่งขึ้น

Android 14 จะเพิ่มจำนวนตำแหน่งที่ระบบแสดงข้อมูลที่คุณประกาศไว้ในแบบฟอร์ม Play Console เพื่อปรับปรุงความเป็นส่วนตัวของผู้ใช้ ปัจจุบันผู้ใช้ดูข้อมูลนี้ได้ในส่วนความปลอดภัยของข้อมูลในข้อมูลผลิตภัณฑ์ของแอปใน Google Play

เราขอแนะนำให้คุณอ่านนโยบายการแชร์ข้อมูลตำแหน่งของแอปและใช้เวลาสักครู่เพื่อทำการอัปเดตที่เกี่ยวข้องในส่วนความปลอดภัยของข้อมูล Google Play ของแอป

ดูข้อมูลเพิ่มเติมในคำแนะนำเกี่ยวกับวิธีทำให้ข้อมูลความปลอดภัยของข้อมูลปรากฏขึ้นอย่างชัดเจนมากขึ้นใน Android 14

การช่วยเหลือพิเศษ

การปรับขนาดแบบอักษรที่ไม่ใช่แบบเชิงเส้นเป็น 200%

ตั้งแต่ Android 14 เป็นต้นไป ระบบจะรองรับการปรับขนาดแบบอักษรได้สูงสุด 200% เพื่อให้ผู้ใช้มีตัวเลือกการช่วยเหลือพิเศษเพิ่มเติม

หากคุณใช้หน่วยพิกเซลที่รองรับการปรับขนาด (sp) เพื่อกำหนดขนาดข้อความอยู่แล้ว การเปลี่ยนแปลงนี้ อาจไม่ส่งผลต่อแอปของคุณมากนัก อย่างไรก็ตาม คุณควรทำการทดสอบ UI โดยเปิดใช้ขนาดแบบอักษรสูงสุด (200%) เพื่อ ให้มั่นใจว่าแอปของคุณรองรับขนาดแบบอักษรที่ใหญ่ขึ้นได้โดยไม่ส่งผลต่อ ความสามารถในการใช้งาน

ความปลอดภัย

ระดับ API เป้าหมายขั้นต่ำที่ติดตั้งได้

从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安全性和隐私性。

恶意软件通常会以较旧的 API 级别为目标平台,以绕过在较新版本 Android 中引入的安全和隐私保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 14 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示以下消息:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

在升级到 Android 14 的设备上,targetSdkVersion 低于 23 的所有应用都将继续保持安装状态。

如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:

adb install --bypass-low-target-sdk-block FILENAME.apk

ชื่อแพ็กเกจของเจ้าของสื่ออาจถูกปกปิด

ที่จัดเก็บสื่อรองรับการค้นหาคอลัมน์ OWNER_PACKAGE_NAME ซึ่งบ่งชี้แอปที่จัดเก็บไฟล์สื่อหนึ่งๆ ตั้งแต่ Android 14 เป็นต้นไป ระบบจะปกปิดค่านี้ เว้นแต่ว่าเงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะเป็นจริง

  • แอปที่จัดเก็บไฟล์สื่อจะมีชื่อแพ็กเกจที่แสดงต่อแอปอื่นๆ เสมอ
  • แอปที่ค้นหาที่เก็บสื่อจะขอสิทธิ์ QUERY_ALL_PACKAGES

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Android กรองระดับการมองเห็นแพ็กเกจเพื่อวัตถุประสงค์ด้านความเป็นส่วนตัว