پلتفرم اندروید ۱۴ شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر برای همه برنامهها هنگام اجرا در اندروید ۱۴، صرف نظر از targetSdkVersion ، اعمال میشود. شما باید برنامه خود را آزمایش کنید و سپس در صورت لزوم، آن را برای پشتیبانی صحیح از این موارد، در صورت لزوم، اصلاح کنید.
حتماً لیست تغییرات رفتاری که فقط بر برنامههای اندروید ۱۴ تأثیر میگذارند را نیز بررسی کنید.
عملکرد اصلی
آلارمهای دقیق زمانبندی شده به طور پیشفرض رد میشوند
آلارمهای دقیق برای اعلانهای مورد نظر کاربر یا برای اقداماتی که باید در یک زمان دقیق انجام شوند در نظر گرفته شدهاند. از Android 14، مجوز SCHEDULE_EXACT_ALARM دیگر به اکثر برنامههای تازه نصبشده که Android 13 و بالاتر را هدف قرار میدهند، از قبل اعطا نمیشود — این مجوز به طور پیشفرض رد میشود.
درباره تغییرات مجوز زمانبندی هشدارهای دقیق بیشتر بدانید.
پخشهای ثبتشده در متن در صف قرار میگیرند در حالی که برنامهها در حافظه پنهان (cache) ذخیره میشوند.
در اندروید 14، سیستم میتواند پخشهای ثبت شده در زمینه را در یک صف قرار دهد، در حالی که برنامه در حالت حافظه پنهان است. این شبیه رفتار صفبندی است که Android 12 (سطح API 31) برای تراکنشهای بایندر غیرهمگام معرفی کرد. پخشهای اعلامشده توسط مانیفست در صف قرار نمیگیرند و برنامهها برای تحویل پخش از حالت حافظه پنهان حذف میشوند.
هنگامی که برنامه از حالت کش خارج می شود، مانند بازگشت به پیش زمینه، سیستم هر گونه پخش در صف را ارائه می دهد. ممکن است چند نمونه از پخش های خاص در یک پخش ادغام شوند. بسته به عوامل دیگر، مانند سلامت سیستم، برنامهها ممکن است از حالت حافظه پنهان حذف شوند و پخشهایی که قبلاً در صف قرار گرفته بودند، ارائه میشوند.
برنامهها میتوانند فقط فرآیندهای پسزمینه خود را متوقف کنند
从 Android 14 开始,当您的应用调用 killBackgroundProcesses() 时,该 API 只能终止您自己应用的后台进程。
如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:
Invalid packageName: com.example.anotherapp
您的应用不应使用 killBackgroundProcesses() API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。Android 旨在让缓存应用在后台运行,并在系统需要内存时自动终止它们。如果您的应用会不必要地终止其他应用,则由于之后需要完全重启这些应用,因此可能会降低系统性能并增加耗电量,这比恢复现有缓存应用所消耗的资源要多得多。
MTU برای اولین کلاینت GATT که درخواست MTU میدهد، روی ۵۱۷ تنظیم شده است.
از Android 14، پشته بلوتوث Android به شدت به نسخه 5.2 مشخصات هسته بلوتوث پایبند است و زمانی که اولین مشتری GATT یک MTU را با استفاده از API BluetoothGatt#requestMtu(int) درخواست می کند، BLE ATT MTU را به 517 بایت درخواست می کند و همه را نادیده می گیرد. درخواست های بعدی MTU در آن اتصال ACL.
برای رفع این تغییر و قویتر کردن برنامهتان، گزینههای زیر را در نظر بگیرید:
- دستگاه جانبی شما باید به درخواست MTU دستگاه Android با مقدار معقولی که بتواند توسط دستگاه جانبی قابل استفاده باشد پاسخ دهد. مقدار نهایی مذاکره حداقل مقدار درخواستی Android و مقدار ارائه شده از راه دور خواهد بود (به عنوان مثال،
min(517, remoteMtu))- اجرای این اصلاح ممکن است به یک بهروزرسانی میانافزار برای دستگاههای جانبی نیاز داشته باشد
- متناوباً، نوشتن مشخصه GATT خود را بر اساس حداقل بین مقدار شناخته شده پشتیبانی شده دستگاه جانبی و تغییر MTU دریافتی محدود کنید.
- یادآوری این است که باید 5 بایت از اندازه پشتیبانی شده برای هدرها کاهش دهید
- برای مثال:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
دلیل جدیدی که میتوان یک برنامه را در سطل آماده به کار محدود قرار داد
اندروید 14 دلیل جدیدی را برای قرار دادن یک برنامه در سطل آماده به کار محدود معرفی می کند. کارهای برنامه چندین بار خطاهای ANR را به دلیل مهلت زمانی روش onStartJob ، onStopJob یا onBind ایجاد میکنند. (برای تغییرات در onStartJob و onStopJob به JobScheduler مراجعه کنید.
برای ردیابی اینکه آیا برنامه وارد سطل آماده به کار محدود شده است یا خیر، توصیه میکنیم با API UsageStatsManager.getAppStandbyBucket() در هنگام اجرای کار یا UsageStatsManager.queryEventsForSelf() هنگام راهاندازی برنامه وارد شوید.
mlock محدود به ۶۴ کیلوبایت
در اندروید 14 (سطح API 34) و بالاتر، پلتفرم حداکثر حافظه قابل قفل شدن با استفاده از mlock() را به 64 کیلوبایت در هر فرآیند کاهش می دهد. در نسخه های قبلی، محدودیت برای هر پردازش 64 مگابایت بود. این محدودیت مدیریت بهتر حافظه را در بین برنامه ها و سیستم ارتقا می دهد. برای ارائه سازگاری بیشتر در بین دستگاهها، Android 14 یک آزمایش CTS جدید برای محدودیت mlock() جدید در دستگاههای سازگار اضافه میکند.
سیستم، استفاده از منابع برنامه ذخیره شده در حافظه پنهان را اجباری میکند
从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。
Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。
使用框架支持的典型生命周期 API(例如服务、JobScheduler 和 Jetpack WorkManager)的应用应该不受这些变化的影响。
تجربه کاربری
تغییرات در نحوهی نمایش اعلانهای غیرقابل رد شدن توسط کاربران
如果您的应用向用户显示不可关闭的前台通知,请注意:Android 14 已更改此行为,允许用户关闭此类通知。
这项变更适用于阻止用户关闭前台的应用
将 Notification.FLAG_ONGOING_EVENT 设置为
Notification.Builder#setOngoing(true) 或
NotificationCompat.Builder#setOngoing(true)。FLAG_ONGOING_EVENT 的行为已发生变化,使用户实际上能够关闭此类通知。
在以下情况下,此类通知仍不可关闭:
- 当手机处于锁定状态时
- 如果用户选择全部清除通知操作(有助于防止意外关闭)
此外,这一新行为不适用于以下用例中的通知:
CallStyle条通知- 企业设备政策控制器 (DPC) 和支持软件包
- 媒体通知
- 默认的搜索选择器软件包
اطلاعات ایمنی دادهها بیشتر قابل مشاهده است
برای افزایش حریم خصوصی کاربران، اندروید 14 تعداد مکان هایی را که سیستم اطلاعاتی را که در فرم کنسول Play اعلام کرده اید نشان می دهد، افزایش می دهد. در حال حاضر، کاربران می توانند این اطلاعات را در بخش ایمنی داده در فهرست برنامه شما در Google Play مشاهده کنند.
ما شما را تشویق میکنیم که خطمشیهای اشتراکگذاری دادههای موقعیت مکانی برنامهتان را مرور کنید و برای انجام هر گونه بهروزرسانیهای قابلاجرا در بخش ایمنی دادههای Google Play برنامهتان، لحظهای وقت بگذارید.
در راهنما در مورد اینکه چگونه اطلاعات ایمنی داده در Android 14 بیشتر قابل مشاهده است بیشتر بیاموزید.
دسترسیپذیری
مقیاسبندی فونت غیرخطی تا ۲۰۰٪
با شروع از اندروید ۱۴، این سیستم از مقیاسبندی فونت تا ۲۰۰٪ پشتیبانی میکند و گزینههای دسترسی بیشتری را در اختیار کاربران قرار میدهد.
اگر از قبل از واحدهای پیکسل مقیاسپذیر (sp) برای تعریف اندازه متن استفاده میکردید، احتمالاً این تغییر تأثیر زیادی بر برنامه شما نخواهد داشت. با این حال، باید تست رابط کاربری را با حداکثر اندازه فونت فعال (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، این مقدار تغییر می کند مگر اینکه حداقل یکی از شرایط زیر صادق باشد:
- برنامه ای که فایل رسانه ای را ذخیره می کند دارای یک نام بسته است که همیشه برای سایر برنامه ها قابل مشاهده است.
برنامه ای که از فروشگاه رسانه درخواست می کند مجوز
QUERY_ALL_PACKAGESدرخواست می کند.
درباره اینکه چگونه Android قابلیت مشاهده بسته را برای اهداف حفظ حریم خصوصی فیلتر می کند ، بیشتر بیاموزید.