Perubahan perilaku: semua aplikasi

Platform Android 14 menyertakan perubahan perilaku yang mungkin memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku untuk semua aplikasi saat dijalankan di Android 14, terlepas dari targetSdkVersion. Sebaiknya uji aplikasi Anda lalu modifikasi sesuai kebutuhan untuk mendukung perubahan ini dengan tepat, jika memungkinkan.

Selain itu, pastikan Anda meninjau daftar perubahan perilaku yang hanya memengaruhi aplikasi yang menargetkan Android 14.

Fungsi inti

Menjadwalkan alarm yang tepat ditolak secara default

Alarm yang tepat dimaksudkan untuk notifikasi yang ditujukan bagi pengguna, atau untuk tindakan yang perlu terjadi pada waktu yang tepat. Mulai Android 14, izin SCHEDULE_EXACT_ALARM tidak lagi diberikan kepada sebagian besar aplikasi terinstal baru yang menargetkan Android 13 dan yang lebih tinggi—izin ditolak secara default.

Pelajari lebih lanjut perubahan izin untuk penjadwalan alarm yang tepat.

Siaran yang terdaftar dalam konteks dimasukkan ke dalam antrean saat aplikasi di-cache

Di Android 14, sistem dapat menempatkan siaran yang terdaftar dalam konteks ke dalam antrean saat aplikasi dalam status cache. Ini mirip dengan perilaku antrean yang diperkenalkan oleh Android 12 (API level 31) untuk transaksi binder asinkron. Siaran yang dideklarasikan manifes tidak dimasukkan dalam antrean, dan aplikasi dihapus dari status cache untuk pengiriman siaran.

Saat aplikasi keluar dari status yang di-cache, misalnya kembali ke latar depan, sistem akan mengirim siaran dalam antrean. Beberapa instance siaran tertentu mungkin digabungkan menjadi satu siaran. Tergantung pada faktor lain, seperti sistem aplikasi mungkin dihapus dari status cache, dan aplikasi apa pun yang sebelumnya dimasukkan ke dalam antrean siaran tetap dikirimkan.

Aplikasi hanya dapat menghentikan proses latar belakangnya sendiri

Mulai Android 14, saat aplikasi memanggil killBackgroundProcesses(), API hanya dapat menghentikan proses latar belakang aplikasi Anda sendiri.

Jika Anda meneruskan nama paket aplikasi lain, metode ini tidak akan memengaruhi proses latar belakang aplikasi tersebut, dan pesan berikut akan muncul di Logcat:

Invalid packageName: com.example.anotherapp

Aplikasi Anda tidak boleh menggunakan killBackgroundProcesses() API atau mencoba memengaruhi siklus proses aplikasi lain, bahkan pada versi OS yang lebih lama. Android didesain untuk menyimpan aplikasi yang di-cache di latar belakang dan menghentikannya secara otomatis saat sistem memerlukan memori. Jika aplikasi Anda menghentikan aplikasi lain secara tidak perlu, hal tersebut dapat mengurangi performa sistem dan meningkatkan konsumsi baterai dengan mewajibkan aplikasi tersebut dimulai ulang sepenuhnya, yang memerlukan lebih banyak resource secara signifikan daripada melanjutkan aplikasi yang ada di cache.

MTU ditetapkan ke 517 untuk klien GATT pertama yang meminta MTU

Mulai Android 14, stack Bluetooth Android lebih mematuhi Spesifikasi Inti Bluetooth Versi 5.2 dan meminta MTU ATT BLE menjadi 517 byte saat klien GATT pertama meminta MTU menggunakan BluetoothGatt#requestMtu(int) API, dan mengabaikan semua permintaan MTU berikutnya pada koneksi ACL tersebut.

Untuk mengatasi perubahan ini dan membuat aplikasi Anda lebih andal, pertimbangkan opsi berikut:

  • Perangkat periferal Anda harus merespons permintaan MTU perangkat Android dengan nilai yang wajar yang dapat diakomodasi oleh periferal. Nilai akhir yang dinegosiasikan akan menjadi minimum dari nilai yang diminta Android dan nilai yang disediakan jarak jauh (misalnya, min(517, remoteMtu))
    • Mengimplementasikan perbaikan ini mungkin memerlukan update firmware untuk periferal
  • Atau, batasi penulisan karakteristik GATT berdasarkan minimum antara nilai periferal yang didukung dan perubahan MTU yang diterima
    • Pengingat bahwa Anda harus mengurangi 5 byte dari ukuran yang didukung untuk header
    • Contoh: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

Alasan baru aplikasi dapat ditempatkan di bucket standby terbatas

Android 14 memperkenalkan alasan baru aplikasi dapat ditempatkan ke dalam bucket standby yang dibatasi. Tugas aplikasi memicu error ANR beberapa kali karena waktu tunggu metode onStartJob, onStopJob, atau onBind habis. (Lihat JobScheduler memperkuat perilaku callback dan jaringan untuk perubahan pada onStartJob dan onStopJob.)

Untuk melacak apakah aplikasi telah memasuki bucket standby yang dibatasi atau tidak, sebaiknya lakukan logging dengan API UsageStatsManager.getAppStandbyBucket() saat eksekusi tugas atau UsageStatsManager.queryEventsForSelf() saat startup aplikasi.

mlock dibatasi hingga 64 KB

在 Android 14(API 级别 34)及更高版本中,平台将可使用 mlock() 锁定的最大内存量减少到每个进程 64 KB。在之前的版本中,每个进程的上限为 64 MB。此限制有助于更好地管理应用和系统的内存。为了在各种设备上提供更一致的体验,Android 14 针对兼容设备上的新 mlock() 限制添加了一项新的 CTS 测试

Sistem menerapkan penggunaan resource aplikasi yang di-cache

从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。

Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。

使用框架支持的典型生命周期 API(例如服务JobSchedulerJetpack WorkManager)的应用应该不受这些变化的影响。

Pengalaman pengguna

Perubahan pada cara pengguna menerima notifikasi yang tidak dapat ditutup

如果您的应用向用户显示不可关闭的前台通知,请注意:Android 14 已更改此行为,允许用户关闭此类通知。

这项变更适用于阻止用户关闭前台的应用 将 Notification.FLAG_ONGOING_EVENT 设置为 Notification.Builder#setOngoing(true)NotificationCompat.Builder#setOngoing(true)FLAG_ONGOING_EVENT 的行为已发生变化,使用户实际上能够关闭此类通知。

在以下情况下,此类通知仍不可关闭:

  • 当手机处于锁定状态时
  • 如果用户选择全部清除通知操作(有助于防止意外关闭)

此外,这一新行为不适用于以下用例中的通知:

  • CallStyle 条通知
  • 企业设备政策控制器 (DPC) 和支持软件包
  • 媒体通知
  • 默认的搜索选择器软件包

Informasi keamanan data terlihat lebih jelas

为了加强用户隐私保护,Android 14 增加了系统显示您在 Play 管理中心表单中声明的信息的位置数量。目前,用户可以在 Google Play 中的应用详情的数据安全部分查看此信息。

我们建议您查看应用的位置数据分享政策,并花一点时间对应用的 Google Play“数据安全”部分进行任何适用的更新。

如需了解详情,请参阅有关如何在 Android 14 上以更显眼的方式显示数据安全信息的指南。

Aksesibilitas

Penskalaan font non-linear ke 200%

从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍功能选项。

如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。

Keamanan

API level target minimum yang dapat diinstal

Mulai Android 14, aplikasi dengan targetSdkVersion di bawah 23 tidak dapat diinstal. Mewajibkan aplikasi memenuhi persyaratan API level target minimum akan meningkatkan keamanan dan privasi bagi pengguna.

Malware sering kali menargetkan API level lama untuk mengabaikan perlindungan privasi dan keamanan yang telah diperkenalkan dalam versi Android yang lebih baru. Misalnya, beberapa aplikasi malware menggunakan targetSdkVersion dari 22 agar tidak dikenai model izin runtime yang diperkenalkan pada tahun 2015 oleh Android 6.0 Marshmallow (API level 23). Perubahan Android 14 ini mempersulit malware untuk menghindari peningkatan keamanan dan privasi. Mencoba menginstal aplikasi yang menargetkan API level yang lebih rendah akan mengakibatkan kegagalan penginstalan, dengan pesan berikut muncul di Logcat:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

Pada perangkat yang diupgrade ke Android 14, aplikasi dengan targetSdkVersion yang lebih rendah dari 23 akan tetap diinstal.

Jika Anda perlu menguji aplikasi yang menargetkan API level lama, gunakan perintah ADB berikut:

adb install --bypass-low-target-sdk-block FILENAME.apk

Nama paket pemilik media mungkin akan disamarkan

Penyimpanan media mendukung kueri untuk kolom OWNER_PACKAGE_NAME, yang menunjukkan aplikasi yang menyimpan file media tertentu. Mulai Android 14, nilai ini disamarkan kecuali jika setidaknya salah satu kondisi berikut terpenuhi:

Pelajari lebih lanjut cara Android memfilter visibilitas paket untuk tujuan privasi.