پلتفرم Android 16 شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر برای همه برنامهها هنگام اجرا بر روی Android 16 اعمال میشود، صرفنظر از targetSdkVersion
. شما باید برنامه خود را آزمایش کنید و سپس آن را در صورت لزوم برای پشتیبانی از این تغییرات، در صورت لزوم، تغییر دهید.
حتماً فهرستی از تغییرات رفتاری را نیز مرور کنید که فقط بر برنامههایی که Android 16 را هدف قرار میدهند تأثیر میگذارد .
عملکرد اصلی
اندروید 16 شامل تغییرات زیر است که قابلیتهای اصلی سیستم اندروید را تغییر داده یا گسترش میدهد.
بهینه سازی سهمیه JobScheduler
از Android 16 شروع میکنیم، ما سهمیه زمان اجرای کار را به طور منظم و سریع بر اساس عوامل زیر تنظیم میکنیم:
- برنامه در کدام سطل آماده به کار برنامه قرار دارد : در Android 16، سطل های آماده به کار فعال با یک سهمیه زمان اجرا سخاوتمندانه شروع به اجرا می کنند.
- اگر کار در حالی که برنامه در بالاترین وضعیت است اجرا شود : در Android 16، Jobs زمانی که برنامه برای کاربر قابل مشاهده است شروع می شود و پس از نامرئی شدن برنامه ادامه می یابد، به سهمیه زمان اجرای کار پایبند خواهد بود.
- اگر کار هنگام اجرای یک سرویس پیشزمینه اجرا میشود : در Android 16، کارهایی که همزمان با یک سرویس پیشزمینه اجرا میشوند، به سهمیه زمان اجرای کار پایبند هستند. اگر از کارهایی برای انتقال داده توسط کاربر استفاده می کنید، به جای آن از کارهای انتقال داده توسط کاربر استفاده کنید.
این تغییر بر وظایف برنامه ریزی شده با استفاده از WorkManager، JobScheduler و DownloadManager تأثیر می گذارد. برای رفع اشکال چرایی توقف کار، توصیه میکنیم با فراخوانی WorkInfo.getStopReason()
ثبت کنید که چرا کارتان متوقف شده است (برای کارهای JobScheduler، با JobParameters.getStopReason()
) تماس بگیرید.
برای اطلاعات بیشتر در مورد بهترین شیوه های باتری بهینه، به راهنمای بهینه سازی استفاده از باتری برای API های زمان بندی کار مراجعه کنید.
همچنین توصیه میکنیم از API جدید JobScheduler#getPendingJobReasonsHistory
که در اندروید 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)
اهمیت یک کار را در زمانی که برنامه زمانبندی در پیشزمینه است یا به طور موقت از محدودیتهای پسزمینه معاف است، نشان میدهد.
این روش از اندروید 12 (سطح API 31) منسوخ شده است. با شروع اندروید 16، دیگر به طور موثر عمل نمی کند و فراخوانی این روش نادیده گرفته می شود.
این حذف عملکرد برای JobInfo#isImportantWhileForeground()
نیز اعمال می شود. با شروع در اندروید 16، اگر متد فراخوانی شود، متد false
برمیگرداند.
دامنه اولویت پخش سفارشی دیگر جهانی نیست
برنامههای اندرویدی مجاز به تعریف اولویتها در گیرندههای پخش برای کنترل ترتیب دریافت و پردازش پخش توسط گیرندهها هستند. برای گیرندههای اعلامشده با مانیفست، برنامهها میتوانند از ویژگی android:priority
برای تعریف اولویت و برای گیرندههای ثبت شده در متن، برنامهها میتوانند از API IntentFilter#setPriority()
برای تعریف اولویت استفاده کنند. هنگامی که یک پخش ارسال می شود، سیستم آن را به ترتیب اولویت، از بالاترین به پایین ترین، به گیرنده ها تحویل می دهد.
در Android 16، سفارش تحویل پخش با استفاده از ویژگی android:priority
یا IntentFilter#setPriority()
در فرآیندهای مختلف تضمین نمی شود. اولویتهای پخش فقط در همان فرآیند درخواست رعایت میشوند و نه در همه فرآیندها.
همچنین، اولویتهای پخش بهطور خودکار به محدوده ( SYSTEM_LOW_PRIORITY
+ 1، SYSTEM_HIGH_PRIORITY
- 1) محدود میشوند. فقط اجزای سیستم مجاز به تنظیم SYSTEM_LOW_PRIORITY
، SYSTEM_HIGH_PRIORITY
به عنوان اولویت پخش خواهند بود.
اگر برنامه شما یکی از موارد زیر را انجام دهد ممکن است تحت تأثیر قرار گیرد:
- برنامه شما چندین فرآیند را با هدف پخش یکسان اعلام کرده است و انتظاراتی در مورد دریافت آن مقاصد با ترتیب خاصی بر اساس اولویت دارد.
- فرآیند درخواست شما با سایر فرآیندها در تعامل است و انتظاراتی در مورد دریافت هدف پخش با ترتیب خاصی دارد.
اگر فرآیندها نیاز به هماهنگی با یکدیگر دارند، باید با استفاده از کانال های هماهنگی دیگر ارتباط برقرار کنند.
تغییرات داخلی ART
Android 16 شامل آخرین بهروزرسانیهای Android Runtime (ART) است که عملکرد Android Runtime (ART's) را بهبود میبخشد و از ویژگیهای اضافی جاوا پشتیبانی میکند. از طریق بهروزرسانیهای سیستم Google Play، این بهبودها برای بیش از یک میلیارد دستگاه دارای Android 12 (سطح API 31) و بالاتر نیز در دسترس است.
با انتشار این تغییرات، کتابخانهها و کد برنامههایی که به ساختارهای داخلی ART متکی هستند ممکن است در دستگاههای دارای Android 16 به درستی کار نکنند، همراه با نسخههای قبلی اندروید که ماژول ART را از طریق بهروزرسانیهای سیستم Google Play بهروزرسانی میکنند.
اتکا به ساختارهای داخلی (مانند رابطهای غیر SDK ) همیشه میتواند منجر به مشکلات سازگاری شود، اما بسیار مهم است که از تکیه بر کد (یا کتابخانههای حاوی کد) که از ساختارهای داخلی ART استفاده میکنند، اجتناب کنید، زیرا تغییرات ART به پلتفرم مرتبط نیست. نسخه ای که دستگاه در حال اجرا است و آنها از طریق به روز رسانی سیستم Google Play به بیش از یک میلیارد دستگاه می روند.
همه برنامهنویسها باید با آزمایش کامل برنامههایشان در Android 16 بررسی کنند که آیا برنامهشان تحت تأثیر قرار گرفته است یا خیر. علاوه بر این، مسائل شناختهشده را بررسی کنید تا ببینید آیا برنامه شما به کتابخانههایی وابسته است که ما شناسایی کردهایم که به ساختارهای ART داخلی متکی هستند یا خیر. اگر کد برنامه یا وابستگیهای کتابخانهای دارید که تحت تأثیر قرار گرفتهاند، در صورت امکان به دنبال جایگزینهای API عمومی باشید و با ایجاد یک درخواست ویژگی در ردیاب مشکل ما، APIهای عمومی را برای موارد استفاده جدید درخواست کنید.
تجربه کاربری و رابط کاربری سیستم
اندروید 16 شامل تغییرات زیر است که برای ایجاد یک تجربه کاربری سازگارتر و بصری در نظر گرفته شده است.
منسوخ کردن اعلامیههای دسترسی مخل
Android 16 اعلامیههای دسترسپذیری را که با استفاده از announceForAccessibility
یا ارسال رویدادهای دسترسپذیری TYPE_ANNOUNCEMENT
مشخص میشود، منسوخ میکند. اینها میتوانند تجربیات کاربری متناقضی را برای کاربران TalkBack و صفحهخوان Android ایجاد کنند، و جایگزینها بهتر طیف وسیعتری از نیازهای کاربر را در انواع فناوریهای کمکی Android برآورده میکنند.
نمونه هایی از جایگزین ها:
- برای تغییرات مهم رابط کاربری مانند تغییرات پنجره، از
Activity.setTitle(CharSequence)
وsetAccessibilityPaneTitle(java.lang.CharSequence)
استفاده کنید. در Compose، ازModifier.semantics { paneTitle = "paneTitle" }
استفاده کنید - برای اطلاع کاربر از تغییرات در رابط کاربری حیاتی، از
setAccessibilityLiveRegion(int)
استفاده کنید. در Compose، ازModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
استفاده کنید. از این موارد باید به اندازه کافی استفاده شود زیرا ممکن است هر بار که یک View به روز می شود، اعلان ایجاد کند. - برای اطلاع دادن به کاربران در مورد خطاها،
AccessibilityEvent
از نوعAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
ارسال کنید وAccessibilityNodeInfo#setError(CharSequence)
تنظیم کنید، یاTextView#setError(CharSequence)
استفاده کنید.
اسناد مرجع برای announceForAccessibility
API منسوخ شده شامل جزئیات بیشتری در مورد جایگزین های پیشنهادی است.
پشتیبانی از ناوبری 3 دکمه
Android 16 پشتیبانی پیشبینیکننده را برای پیمایش 3 دکمهای برای برنامههایی که به درستی به بازگشت پیشبینی مهاجرت کردهاند، به ارمغان میآورد. با فشار دادن طولانی دکمه برگشت، یک انیمیشن پیشبینیکننده به عقب آغاز میشود و به شما پیشنمایشی از جایی که سوایپ به عقب شما را میبرد میدهد.
این رفتار در تمام قسمتهای سیستم که از انیمیشنهای پیشبینیکننده پشتیبان پشتیبانی میکنند، اعمال میشود، از جمله انیمیشنهای سیستم (بازگشت به خانه، کار متقابل و فعالیت متقابل).