تغييرات السلوك: جميع التطبيقات

يتضمّن نظام Android 16 تغييرات في السلوك قد تؤثّر في تطبيقك. تسري تغييرات السلوك التالية على جميع التطبيقات عند تشغيلها على Android 16، بغض النظر عن targetSdkVersion. عليك اختبار تطبيقك ثم تعديله حسب الحاجة لدعم هذه التغييرات، حيثما ينطبق ذلك.

احرص أيضًا على مراجعة قائمة تغييرات السلوك التي تؤثّر فقط في التطبيقات التي تستهدف Android 16.

الوظيفة الأساسية

يتضمّن Android 16 (المستوى 36 لواجهة برمجة التطبيقات) التغييرات التالية التي تعدِّل أو توسِّع إمكانات أساسية مختلفة في نظام Android.

تحسينات على حصص JobScheduler

从 Android 16 开始,我们将根据以下因素调整常规作业和加急作业的执行运行时配额:

  • 应用所处的应用待机存储分区:在 Android 16 中,活跃待机存储分区将开始通过宽松的运行时配额强制执行。
  • 如果作业在应用处于前台状态时开始执行:在 Android 16 中,如果作业在应用对用户可见时开始执行,并在应用变为不可见后继续执行,则会遵守作业运行时配额。
  • 如果作业在运行前台服务时执行:在 Android 16 中,与前台服务同时执行的作业将遵守作业运行时配额。如果您利用作业进行用户发起的数据传输,请考虑改用用户发起的数据传输作业

此变更会影响使用 WorkManager、JobScheduler 和 DownloadManager 调度的任务。如需调试作业停止的原因,我们建议您通过调用 WorkInfo.getStopReason()(对于 JobScheduler 作业,请调用 JobParameters.getStopReason())来记录作业停止的原因。

如需了解应用的状态如何影响其可使用的资源,请参阅电源管理资源限制。 如需详细了解电池优化方面的最佳实践,请参阅有关针对任务调度 API 优化电池使用的指南。

我们还建议利用 Android 16 中引入的新 JobScheduler#getPendingJobReasonsHistory API 来了解作业未执行的原因。

测试

如需测试应用的行为,只要应用在 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

سبب إيقاف الوظائف الفارغة التي تم تجاهلها

تحدث المهمة المهجورة عندما يتم جمع المهملات من عنصر JobParameters المرتبط بالمهمة ، ولكن لم يتم استدعاء JobService#jobFinished(JobParameters, boolean) للإشارة إلى اكتمال المهمة. يشير ذلك إلى أنّه قد يكون المهام قيد التشغيل ويتم إعادة جدولتها بدون علم التطبيق.

لا تحافظ التطبيقات التي تعتمد على JobScheduler على إشارة قوية إلى ملف برمجي JobParameters، وسيتم الآن منح مهلة سبب إيقاف المهمة الجديد STOP_REASON_TIMEOUT_ABANDONED بدلاً من STOP_REASON_TIMEOUT.

إذا تكرّر سبب الإيقاف الجديد، سيتّخذ النظام خطوات لتخفيف المشكلة من خلال تقليل تكرار المهام.

على التطبيقات استخدام سبب الإيقاف الجديد لرصد المهام المتوقفة عن العمل والحدّ منها.

إذا كنت تستخدم WorkManager أو AsyncTask أو DownloadManager، لن تتأثر بهذه التغييرات، لأنّ واجهات برمجة التطبيقات هذه تدير دورة حياة المهام نيابةً عن تطبيقك.

إيقاف نهائي للوظيفة `JobInfo#setImportantWhileForeground`

JobInfo.Builder#setImportantWhileForeground(boolean) 方法用于在调度应用位于前台或暂时豁免于后台限制时指示作业的优先级。

自 Android 12(API 级别 31)起,此方法已废弃。从 Android 16 开始,它不再有效,系统会忽略调用此方法。

此功能移除也适用于 JobInfo#isImportantWhileForeground()。从 Android 16 开始,如果调用该方法,该方法会返回 false

لم يعُد نطاق أولوية البث المنظَّم عالميًا

يُسمح لتطبيقات Android بتحديد الأولويات في أجهزة استقبال البث للتحكّم في الترتيب الذي تتلقّى به أجهزة الاستقبال البث وتعالجه. بالنسبة إلى تطبيقات معالجة الإشعارات المُعلَن عنها في البيان، يمكنها استخدام السمة android:priority لتحديد الأولوية، وبالنسبة إلى تطبيقات معالجة الإشعارات المسجَّلة في السياق، يمكنها استخدام واجهة برمجة التطبيقات IntentFilter#setPriority() لتحديد الأولوية. عند إرسال بث، يرسله النظام إلى المستلِمين حسب تصاعد أولويتهم، من الأعلى إلى الأدنى.

في الإصدار Android 16، لن يتم ضمان ترتيب إرسال البث باستخدام سمة android:priority أو IntentFilter#setPriority() في عمليات مختلفة. سيتم الالتزام بأولويات البث فقط في عملية التقديم نفسها وليس في جميع العمليات.

بالإضافة إلى ذلك، سيتم تلقائيًا حصر أولويات البث في النطاق (SYSTEM_LOW_PRIORITY + 1، SYSTEM_HIGH_PRIORITY - 1). سيتم السماح فقط لمكونات النظام بضبط SYSTEM_LOW_PRIORITY وSYSTEM_HIGH_PRIORITY كأولوية البث.

قد يتأثر تطبيقك إذا كان ينفّذ أيًا مما يلي:

  1. أعلن تطبيقك عن عمليات متعدّدة باستخدام نية البث نفسها، ولديه توقّعات بشأن تلقّي هذه النوايا بترتيب معين استنادًا إلى الأولوية.
  2. تتفاعل عملية تقديم الطلب مع عمليات أخرى وتتوقّع تلقّي نية بثّ بترتيب معيّن.

إذا كانت العمليات بحاجة إلى التنسيق مع بعضها، يجب أن تتواصل باستخدام قنوات تنسيق أخرى.

التغييرات الداخلية في وقت تشغيل Android ‏(ART)

Android 16 包含 Android 运行时 (ART) 的最新更新,这些更新可提升 Android 运行时 (ART) 的性能,并支持更多 Java 功能。通过 Google Play 系统更新,搭载 Android 12(API 级别 31)及更高版本的 10 亿多部设备也将受益于这些改进。

发布这些变更后,依赖于 ART 内部结构的库和应用代码在搭载 Android 16 的设备以及通过 Google Play 系统更新来更新 ART 模块的较低 Android 版本上可能无法正常运行。

依赖于内部结构(例如非 SDK 接口)始终会导致兼容性问题,但避免依赖于利用内部 ART 结构的代码(或包含代码的库)尤为重要,因为 ART 更改与设备所运行的平台版本无关,并且会通过 Google Play 系统更新推送到超过 10 亿部设备。

所有开发者都应在 Android 16 上对其应用进行全面测试,以检查其应用是否受到影响。此外,请查看已知问题,了解您的应用是否依赖于我们发现的任何依赖于内部 ART 结构的库。如果您的应用代码或库依赖项受到影响,请尽可能寻找公共 API 替代方案,并在问题跟踪器中创建功能请求,为新用例请求公共 API。

وضع التوافق مع حجم الصفحة 16 كيلوبايت

وفّر الإصدار 15 من Android إمكانية استخدام صفحات ذاكرة بحجم 16 كيلوبايت لتحسين أداء المنصة. يضيف الإصدار 16 من Android وضع ملف شخصي متوافقًا، ما يسمح بتشغيل بعض التطبيقات المُنشأة لصفحات ذاكرة بحجم 4 كيلوبايت على جهاز تم ضبطه لصفحات ذاكرة بحجم 16 كيلوبايت.

عندما يكون تطبيقك قيد التشغيل على جهاز يعمل بنظام Android 16 أو إصدار أحدث، إذا رصد نظام Android أنّ تطبيقك يحتوي على صفحات ذاكرة بحجم 4 كيلوبايت، سيستخدم تلقائيًا وضع التوافق ويعرض مربّع حوار إشعار للمستخدم. سيؤدي ضبط سمة android:pageSizeCompat في AndroidManifest.xml لتفعيل وضع التوافق مع الإصدارات القديمة إلى منع عرض مربّع الحوار عند تشغيل تطبيقك. لاستخدام السمة android:pageSizeCompat، عليك تجميع تطبيقك باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android 16.

لتحقيق أفضل أداء وموثوقية وثبات، يجب أن يظل تطبيقك متوافقًا مع حجم الصفحة الذي يبلغ 16 كيلوبايت. يمكنك الاطّلاع على مزيد من التفاصيل في مقالتنا الأخيرة في المدونة التي تتناول تحديث تطبيقاتك لتتوافق مع صفحات الذاكرة التي تبلغ سعة كل منها 16 كيلوبايت.

مربّع حوار وضع التوافق الذي يظهر عندما يرصد النظام أنّه يمكن تشغيل تطبيق مُحاذَى بحجم 4 كيلوبايت بشكلٍ أفضل إذا تم محاذاة 16 كيلوبايت.

تجربة المستخدم وواجهة مستخدم النظام

يتضمّن Android 16 (المستوى 36 لواجهة برمجة التطبيقات) التغييرات التالية التي تهدف إلى توفير تجربة مستخدم أكثر اتساقًا وسهولة.

إيقاف الإشعارات الخطيرة المتعلّقة بإمكانية الوصول

Android 16 废弃了无障碍功能通告,其特征是使用 announceForAccessibility 或调度 TYPE_ANNOUNCEMENT 无障碍功能事件。这可能会给 TalkBack 和 Android 屏幕阅读器用户带来不一致的用户体验,而替代方案可以更好地满足各种 Android 辅助技术的用户需求。

替代方案示例:

已废弃的 announceForAccessibility API 的参考文档中包含有关建议替代方案的更多详细信息。

التنقّل باستخدام ثلاثة أزرار

Android 16 为已正确迁移到预测性返回的应用的三按钮导航栏引入了预测性返回支持。长按返回按钮会启动预测性返回动画,让您预览返回滑动手势会打开的界面。

此行为适用于系统中支持预测性返回动画的所有区域,包括系统动画(返回主屏幕、跨任务和跨 activity)。

“三按钮”导航模式下的预测性返回动画。

رموز التطبيقات المستوحاة من مظهر معيّن تلقائيًا

从 Android 16 QPR 2 开始,Android 会自动将主题应用于应用图标,以打造一致的主屏幕体验。如果应用未提供自己的带主题的应用图标,就会发生这种情况。应用可以通过在自适应图标中添加单色图层来控制主题化应用图标的设计,并在 Android Studio 中预览应用图标的外观。

أشكال الأجهزة

يتضمّن Android 16 (المستوى 36 لواجهة برمجة التطبيقات) التغييرات التالية للتطبيقات عند عرضها على الشاشات من قِبل مالكي الأجهزة الافتراضية.

عمليات إلغاء مالك الجهاز الافتراضي

虚拟设备所有者是创建和管理虚拟设备的可信应用或特权应用。虚拟设备所有者在虚拟设备上运行应用,然后将应用投影到远程设备的显示屏上,例如个人电脑、虚拟现实设备或车载信息娱乐系统。虚拟设备所有者使用的是本地设备,例如手机。

手机上的虚拟设备所有者创建将应用投影到远程显示屏的虚拟设备。

按应用替换项

在搭载 Android 16(API 级别 36)的设备上,虚拟设备所有者可以替换其管理的特定虚拟设备上的应用设置。例如,为了改进应用布局,虚拟设备所有者在将应用投影到外部显示屏上时,可以忽略屏幕方向、宽高比和可调整大小性限制。

常见的重大更改

Android 16 的行为可能会影响应用在汽车显示屏或 Chromebook 等大屏幕设备规格上的界面,尤其是那些专为竖屏小显示屏设计的布局。如需了解如何让应用适应所有设备类型,请参阅关于自适应布局

参考

配套应用串流

الأمان

يتضمّن Android 16 (المستوى 36 لواجهة برمجة التطبيقات) تغييرات تعزّز أمان النظام للمساعدة في حماية التطبيقات والمستخدمين من التطبيقات الضارة.

تحسين الأمان ضدّ هجمات إعادة توجيه Intent

يوفر Android 16 حماية تلقائية من هجمات إعادة توجيه Intent العامة، مع الحد الأدنى من التوافق والتغييرات المطلوبة من المطوّرين.

نحن بصدد طرح حلول تلقائية لتعزيز الأمان من الثغرات الأمنية التي تسمح بإعادة توجيه Intent. في معظم الحالات، لن تواجه التطبيقات التي تستخدم النوايا بشكل طبيعي أي مشاكل في التوافق. لقد جمعنا مقاييس خلال عملية التطوير لمراقبة التطبيقات التي قد تواجه أعطالاً.

تحدث إعادة توجيه النية في Android عندما يتمكّن مهاجم من التحكّم جزئيًا أو كليًا في محتويات نية تُستخدم لتشغيل مكوّن جديد في سياق تطبيق معرّض للخطر، بينما يشغّل تطبيق الضحية نية غير موثوق بها على مستوى فرعي في حقل إضافات لنية ("على المستوى الأعلى"). يمكن أن يؤدي ذلك إلى تشغيل تطبيق المهاجم لمكوّنات خاصة في سياق تطبيق الضحية، أو تشغيل إجراءات مميزة، أو الحصول على إذن الوصول إلى بيانات حساسة باستخدام عنوان URI، ما قد يؤدي إلى سرقة البيانات وتنفيذ تعليمات برمجية عشوائية.

إيقاف معالجة إعادة توجيه النية

يطرح Android 16 واجهة برمجة تطبيقات جديدة تتيح للتطبيقات إيقاف الحماية من مخاطر التشغيل. قد يكون ذلك ضروريًا في حالات معيّنة حيث يتداخل سلوك الأمان التلقائي مع حالات الاستخدام المشروعة للتطبيق.

بالنسبة إلى التطبيقات التي يتم تجميعها باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android 16 (المستوى 36 من واجهة برمجة التطبيقات) أو إصدار أحدث

يمكنك استخدام طريقة removeLaunchSecurityProtection() مباشرةً في عنصر Intent.

val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent")
iSublevel?.removeLaunchSecurityProtection() // Opt out from hardening
iSublevel?.let { startActivity(it) }
بالنسبة إلى التطبيقات التي يتم تجميعها باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android 15 (المستوى 35 من واجهة برمجة التطبيقات) أو إصدار أقدم

مع أنّ ذلك غير مستحسن، يمكنك استخدام الانعكاس للوصول إلى طريقة removeLaunchSecurityProtection().

val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent", Intent::class.java)
try {
    val removeLaunchSecurityProtection = Intent::class.java.getDeclaredMethod("removeLaunchSecurityProtection")
    removeLaunchSecurityProtection.invoke(iSublevel)
} catch (e: Exception) {
    // Handle the exception, e.g., log it
} // Opt-out from the security hardening using reflection
iSublevel?.let { startActivity(it) }

لم يعُد يتم إشعار التطبيقات المصاحبة بمهلات الاكتشاف

يقدّم نظام التشغيل Android 16 سلوكًا جديدًا أثناء عملية إقران الجهاز المصاحب لحماية خصوصية الموقع الجغرافي للمستخدم من التطبيقات الضارّة. لم يعُد يتم إعلام جميع التطبيقات المصاحبة التي تعمل على الإصدار 16 من Android بشكل مباشر بوقت الاستراحة في عملية الاكتشاف باستخدام RESULT_DISCOVERY_TIMEOUT. بدلاً من ذلك، يتم إعلام المستخدم بأحداث انتهاء مهلة باستخدام مربّع حوار مرئي. عندما يغلِق المستخدم مربّع الحوار، يتم تنبيه التطبيق بتعذُّر الربط بحساب RESULT_USER_REJECTED.

تم أيضًا تمديد مدة البحث من 20 ثانية الأصلية، ويمكن للمستخدم إيقاف اكتشاف الجهاز في أي وقت أثناء البحث. إذا تم العثور على جهاز واحد على الأقل خلال أوّل 20 ثانية من بدء البحث، يتوقف "مدير خدمات الطباعة في السحابة الإلكترونية" عن البحث عن أجهزة إضافية.

إمكانية الاتصال

يتضمّن Android 16 (مستوى واجهة برمجة التطبيقات 36) التغييرات التالية في حزمة بروتوكول Bluetooth لتحسين إمكانية الاتصال بالأجهزة الطرفية.

تحسين معالجة فقدان الربط

从 Android 16 开始,蓝牙堆栈已更新,以便在检测到远程配对丢失时提高安全性和用户体验。以前,系统会自动解除配对并启动新的配对流程,这可能会导致意外重新配对。在许多情况下,我们发现应用未以一致的方式处理债券损失事件。

为了统一体验,Android 16 改进了系统的绑定丢失处理。如果之前配对的蓝牙设备在重新连接时无法进行身份验证,系统会断开关联,保留本地配对信息,并显示系统对话框,告知用户配对已断开并指示他们重新配对。