يتضمّن نظام التشغيل Android 16 تغييرات في السلوك قد تؤثر في تطبيقك.
تنطبق تغييرات السلوك التالية على جميع التطبيقات عند تشغيلها على Android 16،
بغض النظر عن targetSdkVersion
. يجب اختبار تطبيقك ثم تعديله
حسب الحاجة لتتوافق مع هذه التغييرات، حيثما ينطبق ذلك.
احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثر فقط في التطبيقات التي تستهدف الإصدار 16 من نظام التشغيل Android.
الوظيفة الأساسية
يتضمّن الإصدار 16 من Android التغييرات التالية التي تعدّل أو توسّع الإمكانات الأساسية المختلفة لنظام Android.
تحسينات الحصة في JobScheduler
اعتبارًا من الإصدار 16 من Android، سنعدّل حصة وقت تنفيذ المهام العادية والمهام المُسرَّعة استنادًا إلى العوامل التالية:
- مجموعة التطبيقات في وضع الاستعداد التي ينتمي إليها التطبيق: في الإصدار Android 16، سيبدأ فرض مجموعات التطبيقات النشطة في وضع الاستعداد من خلال حصة سخية لوقت التشغيل.
- إذا بدأت المهمة التنفيذ عندما يكون التطبيق في حالة "أهم التطبيقات": في الإصدار 16 من نظام التشغيل Android، ستلتزم المهام التي بدأت عندما كان التطبيق مرئيًا للمستخدم واستمرت بعد أن أصبح التطبيق غير مرئي بحصة وقت تشغيل المهمة.
- إذا كانت المهمة قيد التنفيذ أثناء تشغيل خدمة تعمل في المقدّمة: في الإصدار 16 من Android، ستلتزم المهام التي يتم تنفيذها بشكل متزامن مع خدمة تعمل في المقدّمة بالحصة المخصّصة لوقت تشغيل المهمة. إذا كنت تستخدِم المهام لنقل البيانات التي بدأها مستخدم، ننصحك باستخدام مهام نقل البيانات التي بدأها مستخدم بدلاً من ذلك.
يؤثّر هذا التغيير في المهام المُجدوَلة باستخدام WorkManager وJobScheduler و
DownloadManager. لتصحيح أخطاء سبب إيقاف إحدى المهام، ننصحك بتسجيل سبب إيقاف
مهمتك من خلال الاتصال WorkInfo.getStopReason()
(بالنسبة إلى
مهام JobScheduler، اتصل JobParameters.getStopReason()
).
لمزيد من المعلومات حول أفضل الممارسات لتحسين استهلاك البطارية، يُرجى الرجوع إلى الإرشادات حول تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام.
ننصحك أيضًا بالاستفادة من واجهة برمجة التطبيقات الجديدة
JobScheduler#getPendingJobReasonsHistory
التي تم طرحها في
Android 16 لمعرفة سبب عدم تنفيذ إحدى المهام.
الاختبار
لاختبار سلوك تطبيقك، يمكنك تفعيل إلغاء تحسينات quot;حصة المهام" معيّنة طالما أنّ التطبيق يعمل على جهاز 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)
إلى أهمية إحدى المهام عندما يكون تطبيق تحديد الموعد في
المقدّمة أو عندما يتم إعفاؤه مؤقتًا من القيود المفروضة على التطبيقات التي تعمل في الخلفية.
تم إيقاف هذه الطريقة نهائيًا منذ الإصدار 12 من Android (المستوى 31 لواجهة برمجة التطبيقات). اعتبارًا من الإصدار Android 16، لم تعُد هذه الطريقة تعمل بفعالية، وسيتم تجاهل استدعاء هذه الطريقة.
تنطبق إزالة هذه الوظيفة أيضًا على
JobInfo#isImportantWhileForeground()
. بدءًا من الإصدار Android
16، إذا تم استدعاء الطريقة، ستُرجع الطريقة false
.
تجربة المستخدم وواجهة المستخدم للنظام
يتضمّن الإصدار 16 من Android التغييرات التالية التي تهدف إلى توفير تجربة استخدام أكثر اتساقًا وسهولة.
إيقاف إعلانات إمكانية الوصول المزعجة نهائيًا
يوقف نظام التشغيل Android 16 نهائيًا إعلانات تسهيل الاستخدام التي تتميز باستخدام
announceForAccessibility
أو إرسال
TYPE_ANNOUNCEMENT
أحداث تسهيل الاستخدام. ويمكن أن تؤدي هذه العناصر إلى اختلاف تجربتَي المستخدمين في TalkBack وقارئ شاشة Android،
وتعمل العناصر البديلة بشكل أفضل على تلبية مجموعة أوسع من احتياجات المستخدمين في مجموعة متنوعة من
التكنولوجيات المساعِدة في Android.
أمثلة على الحلول البديلة:
- بالنسبة إلى التغييرات المهمة في واجهة المستخدم، مثل التغييرات في النوافذ، استخدِم
Activity.setTitle(CharSequence)
وsetAccessibilityPaneTitle(java.lang.CharSequence)
. في الكتابة، استخدِمModifier.semantics { paneTitle = "paneTitle" }
- لإعلام المستخدم بالتغييرات في واجهة المستخدم المهمة، استخدِم رمز
setAccessibilityLiveRegion(int)
. في ميزة "إنشاء"، استخدِم رمزModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. يجب استخدام هذه الإعدادات بقدر معقول، لأنّها قد تؤدي إلى إنشاء إشعارات في كل مرة يتم فيها تعديل أحد "المشاهدات". - لإعلام المستخدمين بالأخطاء، أرسِل
AccessibilityEvent
من النوعAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
واضبطAccessibilityNodeInfo#setError(CharSequence)
، أو استخدِمTextView#setError(CharSequence)
.
تتضمّن المستندات المرجعية لواجهة برمجة التطبيقات
announceForAccessibility
المتوقّفة نهائيًا مزيدًا من التفاصيل حول
البدائل المقترَحة.