پلتفرم 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
برمیگرداند.
تجربه کاربری و رابط کاربری سیستم
اندروید 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 منسوخ شده شامل جزئیات بیشتری در مورد جایگزین های پیشنهادی است.