Android 8.0 (API level 26) memperkenalkan berbagai fitur dan kemampuan baru bagi pengguna dan pengembang. Dokumen ini merangkum apa saja yang baru untuk developer.
Pastikan juga untuk memeriksa Perubahan Perilaku Android 8.0 untuk mempelajari area dengan perubahan platform dapat memengaruhi aplikasi Anda.
Pengalaman Pengguna
Mode Gambar-dalam-Gambar
Android 8.0 (API level 26) memungkinkan peluncuran aktivitas di mode picture-in-picture (PIP). PIP adalah tipe khusus mode multi-aplikasi yang paling sering digunakan untuk pemutaran video. Mode PIP awalnya tersedia untuk Khusus Android TV; Android 8.0 menyediakan fitur ini di perangkat Android lainnya.
Ketika suatu aktivitas dalam mode PIP, aktivitas tersebut berada dalam keadaan dijeda, namun seharusnya
terus menampilkan konten. Karena alasan ini, Anda harus memastikan bahwa aplikasi
tidak menjeda pemutaran di onPause()
sebagai pengendali Sebagai gantinya, Anda harus menjeda video di onStop()
, dan melanjutkan pemutaran di onStart()
. Untuk informasi selengkapnya, lihat
Multi-Aplikasi
Siklus proses.
Untuk menetapkan bahwa aktivitas Anda bisa menggunakan mode PIP, setel
android:supportsPictureInPicture
ke true dalam manifes.
(Mulai Android 8.0, PIP tidak memerlukan
Atribut manifes android:resizeableActivity
.
Namun, Anda harus menetapkan
android:resizeableActivity
ke `true` jika aktivitas Anda mendukung
mode multi-aplikasi.)
Android 8.0 (API level 26) memperkenalkan objek baru, PictureInPictureParams
,
yang Anda teruskan ke metode PIP untuk menetapkan bagaimana suatu aktivitas harus berperilaku
saat dalam mode PIP. Objek ini menetapkan properti seperti atribut
rasio aspek yang disukai aktivitas.
Metode PIP yang dijelaskan dalam Menambahkan Picture-in-picture kini dapat digunakan di semua perangkat Android, tidak hanya di Android TV. Selain itu, Android 8.0 menyediakan metode berikut untuk mendukung Mode PIP:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: Menempatkan aktivitas dalam mode picture-in-picture. Rasio aspek aktivitas dan setelan konfigurasi lainnya ditentukan oleh args. Jika ada kolom di args kosong, sistem akan menggunakan nilai yang ditetapkan saat terakhir kali Anda disebutActivity.setPictureInPictureParams()
.Aktivitas yang ditentukan ditempatkan di sudut layar; sisa layar diisi dengan aktivitas sebelumnya yang ada di layar. Aktivitas yang memasuki mode PIP akan masuk ke keadaan dijeda, namun tetap memulai. Jika pengguna mengetuk aktivitas PIP, sistem akan menampilkan menu untuk berinteraksi dengan; tidak ada peristiwa sentuh yang menjangkau aktivitas saat sedang dalam kondisi PIP.
-
Activity.setPictureInPictureParams()
: Memperbarui setelan konfigurasi PIP aktivitas. Jika aktivitas tersebut saat ini dalam mode PIP, pengaturan akan diperbarui; hal ini berguna jika rasio aspek aktivitas berubah. Jika aktivitas tersebut tidak berada dalam mode PIP, pengaturan konfigurasi ini digunakan terlepas dari MetodeenterPictureInPictureMode()
yang Anda panggil.
Notifikasi
Di Android 8.0 (API level 26), kami telah mendesain ulang notifikasi untuk memberikan cara yang lebih mudah dan konsisten untuk mengelola perilaku notifikasi dan setelan. Perubahan ini mencakup:
- Saluran notifikasi: Android 8.0 memperkenalkan saluran notifikasi yang memungkinkan Anda untuk membuat saluran yang dapat disesuaikan pengguna untuk setiap jenis notifikasi yang ingin Anda tampilkan. Antarmuka pengguna mengacu ke saluran notifikasi sebagai kategori notifikasi. Untuk mempelajari cara untuk mengimplementasikan saluran notifikasi, lihat Mengelola saluran notifikasi.
- Titik notifikasi: Android 8.0 memperkenalkan dukungan untuk menampilkan titik, atau badge, pada ikon peluncur aplikasi. Titik notifikasi mencerminkan kehadiran notifikasi yang belum ditutup atau ditindaklanjuti oleh pengguna. Untuk mengetahui cara menggunakan titik notifikasi, lihat Notifikasi badge.
- Menunda: Pengguna dapat menunda notifikasi, yang menyebabkan notifikasi tidak ditampilkan selama jangka waktu tertentu sebelum muncul kembali. Notifikasi muncul kembali dengan tingkat kepentingan yang sama dengan tingkat penting yang pertama kali muncul. Aplikasi dapat menghapus atau memperbarui notifikasi yang ditunda, tetapi memperbarui notifikasi yang ditunda tidak menyebabkan agar dapat muncul kembali.
- Waktu tunggu notifikasi: Anda dapat menyetel waktu tunggu saat membuat
notifikasi menggunakan
setTimeoutAfter()
. Anda dapat menggunakan metode ini untuk menetapkan durasi notifikasi harus dibatalkan. Jika diperlukan, Anda dapat membatalkan notifikasi sebelum durasi waktu tunggu yang ditetapkan berlalu. - Setelan notifikasi: Anda dapat menelepon
setSettingsText()
untuk menyetel teks yang muncul saat Anda membuat tautan ke pengaturan notifikasi dari notifikasi menggunakan intentNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
. Sistem dapat menyediakan tambahan berikut dengan maksud untuk memfilter setelan yang harus ditampilkan aplikasi Anda kepada pengguna:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
, danNOTIFICATION_ID
. - Penutupan notifikasi: Pengguna dapat menutup sendiri notifikasi, dan
aplikasi dapat menghapusnya secara terprogram. Anda dapat menentukan kapan notifikasi
ditutup dan alasannya ditutup dengan menerapkan
onNotificationRemoved()
dari class ClassNotificationListenerService
. - Warna latar belakang: Anda dapat menetapkan dan mengaktifkan warna latar belakang untuk
notifikasi. Anda sebaiknya hanya menggunakan fitur ini dalam notifikasi untuk
tugas yang sedang berlangsung yang sangat penting
untuk dilihat sekilas oleh pengguna. Sebagai
misalnya, Anda dapat menyetel warna latar belakang untuk notifikasi yang terkait dengan
rute mobil, atau panggilan telepon yang sedang berlangsung. Anda juga dapat menyetel
warna latar belakang yang diinginkan menggunakan
setColor()
. Tindakan ini memungkinkan Anda menggunakansetColorized()
untuk mengaktifkan penggunaan warna latar belakang untuk notifikasi. - Gaya pesan: Di Android 8.0, notifikasi yang menggunakan
Tampilan class
MessagingStyle
lebih banyak konten dalam bentuk yang diciutkan. Anda harus menggunakan ClassMessagingStyle
untuk notifikasi yang terkait dengan pesan. Anda juga dapat menggunakan MetodeaddHistoricMessage()
untuk memberikan konteks pada percakapan dengan menambahkan pesan historis hingga notifikasi terkait pesan.
Framework isi otomatis
Pembuatan akun, login, dan transaksi kartu kredit membutuhkan waktu dan rentan terhadap yang sama. Pengguna dapat mudah frustrasi dengan aplikasi yang membutuhkan jenis ini tugas-tugas berulang.
Android 8.0 (API level 26) membuat pengisian formulir, seperti login dan formulir kartu kredit, menjadi lebih mudah dengan pengenalan Kerangka Kerja Isi Otomatis. Aplikasi yang sudah ada dan yang baru akan berfungsi dengan Framework Isi Otomatis setelah pengguna memilih untuk mengaktifkannya {i>autofill <i}(isi otomatis)
Anda bisa melakukan beberapa langkah untuk mengoptimalkan kinerja aplikasi dengan kerangka kerja. Untuk informasi selengkapnya, lihat Ringkasan Framework Isi Otomatis.
Font yang dapat didownload
Android 8.0 (API level 26) dan Android Support Library 26 memungkinkan Anda meminta font dari aplikasi penyedia layanan alih-alih memaketkan font ke dalam APK atau membiarkan Download font APK. Fitur ini mengurangi ukuran APK, meningkatkan aplikasi tingkat keberhasilan penginstalan, dan memungkinkan beberapa aplikasi menggunakan font yang sama.
Untuk informasi selengkapnya tentang mendownload font, lihat Font yang Dapat Didownload.
Font dalam XML
Android 8.0 (API level 26) memperkenalkan fitur baru, Font dalam XML,
memungkinkan Anda menggunakan {i>font<i} sebagai sumber daya. Artinya, tidak perlu memaketkan font
sebagai aset. Font dikompilasi dalam file R
dan secara otomatis
yang tersedia di dalam
sistem sebagai sumber daya. Anda kemudian dapat mengakses font ini dengan
bantuan jenis resource baru, font
.
Support Library 26 memberikan dukungan penuh untuk fitur ini di perangkat menjalankan API versi 14 dan yang lebih tinggi.
Untuk informasi selengkapnya, tentang penggunaan {i>font<i} sebagai sumber daya dan mengambil {i>font<i} sistem, lihat Font dalam XML.
Pengubahan Ukuran Otomatis TextView
Android 8.0 (API level 26) memungkinkan Anda menyetel perluasan ukuran teks atau melakukan kontrak secara otomatis berdasarkan ukuran TextView. Artinya, jauh mengoptimalkan ukuran teks di berbagai layar atau dengan konten dinamis. Untuk informasi selengkapnya, tentang pengubahan ukuran otomatis TextView di Android 8.0, lihat Pengubahan Ukuran Otomatis TextView.
Ikon adaptif
Android 8.0 (API level 26) memperkenalkan ikon peluncur adaptif. Ikon adaptif mendukung visual efek, dan dapat menampilkan beragam bentuk pada model perangkat yang berbeda. Untuk mempelajari cara membuat ikon adaptif, lihat Ikon Adaptif kami.
Manajemen warna
Developer Android untuk aplikasi pencitraan kini dapat memanfaatkan perangkat baru yang memiliki kemampuan tampilan warna gamut lebar. Untuk menampilkan gamut lebar gambar, aplikasi harus mengaktifkan flag dalam manifesnya (per aktivitas) dan memuat bitmap dengan profil warna lebar yang disematkan (AdobeRGB, Pro Photo RGB, DCI-P3, dll.).
WebView API
Android 8.0 menyediakan sejumlah API untuk membantu Anda mengelola
objek WebView
yang menampilkan konten web di aplikasi Anda.
API ini, yang meningkatkan stabilitas dan keamanan aplikasi Anda, mencakup
berikut ini:
- Version API
- Google SafeBrowsing API
- Termination Handle API
- Renderer Importance API
Untuk mempelajari cara menggunakan API ini lebih lanjut, lihat Mengelola WebView.
Class WebView
kini menyertakan Safe Browsing API untuk meningkatkan keamanan
penjelajahan web. Untuk informasi selengkapnya, lihat
API Safe Browsing Google.
Penyematan pintasan dan widget
Android 8.0 (API level 26) memperkenalkan penyematan pintasan dalam aplikasi dan widget. Di aplikasi Anda, Anda dapat membuat pintasan dan widget tersemat untuk peluncur yang didukung, sesuai dengan izin pengguna.
Untuk informasi selengkapnya, lihat Menyematkan Pintasan dan Widget panduan fitur baru kami.
Rasio aspek layar maksimum
Android 8.0 (API level 26) menghadirkan perubahan pada cara mengonfigurasi rasio aspek maksimum aplikasi.
Pertama, Android 8.0 memperkenalkan maxAspectRasio, yang dapat dapat digunakan untuk menyetel rasio aspek maksimum aplikasi Anda. Selain itu, di Android 8.0 dan yang lebih tinggi, sebuah aplikasi rasio aspek maksimum default adalah rasio aspek asli dari perangkat tempat aplikasi berjalan.
Untuk informasi selengkapnya tentang mendeklarasikan rasio aspek maksimum, lihat Mendukung Beberapa Layar.
Dukungan multi-tampilan
Mulai Android 8.0 (API level 26), platform ini menawarkan peningkatan untuk multilayar. Jika suatu aktivitas mendukung mode multi-aplikasi dan berjalan di perangkat dengan beberapa tampilan, pengguna dapat memindahkan aktivitas dari satu tampilan ke tampilan lainnya. Saat aplikasi meluncurkan aktivitas, aplikasi tersebut bisa menetapkan di tampilan mana aktivitas harus dijalankan.
Catatan: Jika suatu aktivitas mendukung mode multi-aplikasi, Android 8.0 secara otomatis mengaktifkan mendukung multi-tampilan untuk aktivitas tersebut. Anda harus menguji aplikasi untuk memastikan memastikannya berfungsi secara memadai dalam lingkungan multi-tampilan.
Hanya satu aktivitas pada satu waktu yang bisa berada dalam status dilanjutkan, meskipun aplikasi memiliki beberapa tampilan. Aktivitas dengan fokus berada dalam status dilanjutkan; semua aktivitas lain yang terlihat akan dijeda, tetapi tidak dihentikan. Untuk informasi lebih lanjut siklus proses aktivitas saat beberapa aktivitas terlihat, lihat Multi-Jendela Siklus proses.
Saat pengguna memindahkan aktivitas dari satu tampilan ke tampilan lainnya, sistem mengubah ukuran aktivitas dan mengeluarkan perubahan runtime sesuai kebutuhan. Aktivitas Anda dapat menangani perubahan konfigurasi itu sendiri, atau memungkinkan sistem untuk menghancurkan proses yang berisi aktivitas Anda dan membuatnya kembali dengan dimensi kustom. Untuk informasi selengkapnya, lihat Menangani Konfigurasi Perubahan.
ActivityOptions
menyediakan dua metode baru untuk mendukung
beberapa tampilan:
setLaunchDisplayId()
- Menentukan tampilan mana yang harus ditunjukkan pada saat diluncurkan.
getLaunchDisplayId()
- Menampilkan tampilan peluncuran aktivitas saat ini.
Shell adb diperluas untuk mendukung multitampilan.
Perintah shell start
kini dapat digunakan untuk meluncurkan aktivitas,
dan untuk menetapkan tampilan target aktivitas:
adb shell start <activity_name> --display <display_id>
Margin layout gabungan dan pengisi
Android 8.0 (API level 26) memudahkan Anda menentukan situasi dengan sisi yang berlawanan
elemen View
menggunakan margin atau padding yang sama.
Secara khusus, Anda kini dapat menggunakan atribut berikut dalam XML tata letak
file:
-
layout_marginVertical
, yang menentukanlayout_marginTop
danlayout_marginBottom
secara bersamaan. -
layout_marginHorizontal
, yang menentukanlayout_marginLeft
danlayout_marginRight
secara bersamaan. -
paddingVertical
, yang menentukanpaddingTop
danpaddingBottom
secara bersamaan. -
paddingHorizontal
, yang menentukanpaddingLeft
danpaddingRight
secara bersamaan.
Catatan: Jika Anda menyesuaikan logika aplikasi untuk
mendukung berbagai
bahasa dan budaya, termasuk arah teks, perlu diingat bahwa
atribut ini tidak mempengaruhi nilai
layout_marginStart
,
layout_marginEnd
,
paddingStart
, atau
paddingEnd
. Anda dapat menetapkan nilai ini
sendiri, selain
atribut tata letak vertikal dan horizontal baru, untuk membuat perilaku tata letak
yang bergantung pada arah teks.
Rekaman pointer
Beberapa aplikasi, seperti game, desktop jarak jauh, dan klien virtualisasi, sangat mendapat manfaat dari mendapatkan kontrol atas {i>mouse<i}. Perekaman pointer adalah di Android 8.0 (API level 26) yang menyediakan kontrol tersebut dengan mengirimkan semua peristiwa mouse ke tampilan terfokus dalam aplikasi.
Mulai Android 8.0, View
di aplikasi Anda dapat meminta
dan menetapkan pemroses untuk memproses peristiwa pointer yang direkam. Tujuan
kursor mouse disembunyikan saat berada dalam mode ini. Tampilan ini dapat merilis rekaman pointer
ketika tidak lagi memerlukan
informasi {i>mouse<i}. Sistem juga bisa merilis
tangkapan pointer saat tampilan kehilangan fokus, misalnya, saat pengguna membuka
aplikasi lain.
Untuk mendapatkan informasi tentang cara menggunakan fitur ini di aplikasi Anda, lihat Rekaman pointer.
Kategori aplikasi
Android 8.0 (API level 26) memungkinkan setiap aplikasi mendeklarasikan kategori yang sesuai
jika relevan. Kategori ini digunakan untuk mengelompokkan aplikasi yang serupa
tujuan atau fungsi saat menampilkannya kepada pengguna, seperti dalam Penggunaan Data, Penggunaan Baterai, atau
Penggunaan Penyimpanan. Anda dapat mendefinisikan kategori untuk aplikasi Anda dengan mengatur
Atribut android:appCategory
di <application>
Anda
Tag manifes.
Peluncur Android TV
Android 8.0 (API level 26) menyertakan topik baru yang berfokus pada konten, Pengalaman layar utama Android TV, yang tersedia di emulator Android TV dan image perangkat Nexus Player untuk Android 8.0. Layar utama baru mengatur konten video dalam baris yang sesuai dengan saluran, yang masing-masing diisi dengan program oleh aplikasi di sistem. Aplikasi dapat memublikasikan beberapa saluran, dan pengguna dapat mengonfigurasi saluran mana yang ingin Anda lihat di layar beranda. Layar utama Android TV juga menyertakan baris Tonton Berikutnya, yang berisi program dari aplikasi, berdasarkan kebiasaan menonton pengguna. Aplikasi juga dapat memberikan pratinjau video, yang diputar secara otomatis saat pengguna berfokus pada sebuah program. API untuk mengisi saluran dan program adalah bagian dari API TvProvider, yang didistribusikan sebagai Modul Support Library dengan Android 8.0.
AnimatorSet
Mulai Android 8.0 (API level 26), AnimatorSet
API kini mendukung pencarian dan pemutaran
balik. Mencari memungkinkan Anda mengatur posisi animasi yang disetel ke
pada waktu tertentu. Pemutaran secara terbalik berguna jika aplikasi Anda menyertakan animasi
untuk tindakan yang dapat diurungkan. Alih-alih menentukan dua animasi terpisah
set, Anda bisa memainkan
lagu yang sama secara terbalik.
Masukan dan navigasi
Kluster navigasi keyboard
Jika suatu aktivitas di aplikasi Anda menggunakan hierarki tampilan yang kompleks, seperti dalam Gambar 2, pertimbangkan untuk mengatur kelompok elemen UI ke dalam cluster agar lebih mudah navigasi {i>keyboard <i} di antara mereka. Pengguna dapat menekan Meta+Tab, atau Penelusuran+Tab pada perangkat Chromebook, untuk berpindah dari satu cluster ke cluster lain. Contoh bagus dari meliputi: panel samping, bilah navigasi, area konten utama, dan elemen yang dapat berisi banyak elemen turunan.
Untuk membuat elemen View
atau ViewGroup
cluster, setel
android:keyboardNavigationCluster
ke
true
dalam file XML tata letak elemen, atau teruskan true
ke dalam setKeyboardNavigationCluster()
di logika UI aplikasi Anda.
Catatan: Cluster tidak dapat disusun bertingkat, meskipun tidak bertingkat
cluster mungkin muncul pada
tingkat hierarki yang berbeda. Jika Anda mencoba untuk
{i>nest cluster<i}, kerangka kerja hanya memperlakukan jaringan
ViewGroup
sebagai cluster.
Pada perangkat yang memiliki layar sentuh, Anda bisa menyetel cluster
ViewGroup
objek
elemen android:touchscreenBlocksFocus
ke true
untuk
mengizinkan navigasi khusus cluster ke dalam dan ke luar cluster tersebut. Jika Anda menerapkan
konfigurasi ke cluster, pengguna tidak dapat menggunakan tombol Tab atau tombol panah untuk
melakukan navigasi ke dalam atau ke luar
cluster; mereka harus menekan navigasi cluster
menggunakan kombinasi {i>keyboard<i}.
Fokus default tampilan
Di Android 8.0 (API level 26), Anda dapat menetapkan View
yang seharusnya
menerima fokus setelah aktivitas yang dibuat (ulang) dilanjutkan dan pengguna menekan tombol
tombol navigasi keyboard, seperti tombol tab. Untuk menerapkan ini, "fokus secara default" adalah
tetapkan atribut View
android:focusedByDefault
ke true
di
file XML tata letak yang berisi elemen UI, atau teruskan true
ke
setFocusedByDefault()
di
logika UI aplikasi.
Keluaran ucapan
Aktivitas dan layanan dapat
menggunakan instance
TextToSpeech
untuk mendikte dan mengucapkan konten. Sejak
Android 8.0 (API level 26), aplikasi Anda bisa memperoleh informasi pengaturan waktu yang lebih tepat
tentang kapan mesin {i>text-to-speech<i} mulai mengucapkan kata-kata yang disintesis secara individual,
selama mesin telusur menyediakan informasi ini. Anda dapat menggunakan fungsi ini
untuk menarik perhatian pada kata-kata tertentu saat mesin text-to-speech berbicara
mereka.
Untuk menggunakan peningkatan mesin text-to-speech ini di aplikasi Anda, daftarkan
dari instance UtteranceProgressListener
. Sebagai bagian dari
proses pendaftaran, termasuk pengendali untuk
onRangeStart()
.
Mesin text-to-speech memanggil
rangeStart()
untuk merekam
titik waktu saat audio diharapkan diputar dari rentang teks tertentu
untuk memulai. Saat audio untuk rentang teks tersebut mulai diputar, komponen
onRangeStart()
akan dieksekusi. Selanjutnya, aplikasi Anda dapat merespons callback ini, seperti dengan
menyorot rentang teks yang terkait dengan ucapan tersebut.
Untuk mengetahui informasi selengkapnya tentang pelacakan progres pemutaran text-to-speech
mesin, lihat class UtteranceProgressListener
alamat IP internal.
Sistem
Detektor StrictMode baru
Android 8.0 (API level 26) menambahkan tiga detektor StrictMode baru untuk membantu mengidentifikasi potensi bug di aplikasi Anda:
detectUnbufferedIo()
akan mendeteksi saat aplikasi Anda membaca atau menulis data tanpa buffering, yang bisa berdampak drastis tingkat tinggi.detectContentUriWithoutPermission()
akan mendeteksi kapan aplikasi Anda secara tidak sengaja lupa memberikan izin ke aplikasi lain ketika memulai Aktivitas di luar aplikasi Anda.detectUntaggedSockets()
akan mendeteksi saat aplikasi melakukan lalu lintas jaringan tanpa menggunakansetThreadStatsTag(int)
guna memberi tag pada traffic untuk proses debug tujuan.
Data dalam cache
Android 8.0 (API level 26) memberikan panduan dan perilaku yang lebih baik seputar data yang di-cache. Masing-masing
sekarang diberikan kuota kapasitas {i>disk<i} untuk data {i>cache<i}, seperti yang ditampilkan oleh
getCacheQuotaBytes(UUID)
.
Saat sistem perlu mengosongkan kapasitas disk, sistem akan memulai dengan menghapus file yang di-cache dari aplikasi yang melebihi kuota yang dialokasikan. Jadi, jika Anda menyimpan data yang di-{i>cache<i} di bawah yang dialokasikan, file {i>cache<i} Anda akan menjadi yang terakhir dari sistem yang akan dihapus ketika diperlukan. Saat sistem memutuskan file cache mana yang akan dihapus di dalam aplikasi Anda, sistem akan pertimbangkan file terlama terlebih dahulu (sebagaimana ditentukan oleh waktu perubahan).
Ada juga dua perilaku baru yang dapat Anda aktifkan per direktori untuk mengontrol bagaimana sistem mengosongkan data {i>cache<i}:
StorageManager.setCacheBehaviorAtomic()
dapat digunakan untuk menunjukkan bahwa direktori dan semua isinya harus dihapus sebagai unit atom tunggal.setCacheBehaviorTombstone(File, boolean)
dapat digunakan untuk menunjukkan alih-alih menghapus file di dalam direktori, file itu harus dipangkas menjadi 0 byte di panjang, tanpa membiarkan file kosong tetap utuh.
Terakhir, ketika Anda perlu mengalokasikan kapasitas {i>disk <i}untuk file berukuran besar,
allocateBytes(FileDescriptor, long)
API, yang akan otomatis dihapus
file yang di-cache milik aplikasi lain (jika diperlukan) untuk memenuhi permintaan Anda. Saat memutuskan apakah
perangkat memiliki kapasitas {i>disk<i} yang cukup
untuk menyimpan data baru Anda, panggil
getAllocatableBytes(UUID)
daripada menggunakan
getUsableSpace()
, karena yang pertama akan mempertimbangkan semua cache
data yang bersedia dihapus oleh sistem atas nama Anda.
Paging penyedia konten
Kami telah memperbarui penyedia konten guna menyertakan dukungan untuk memuat set data halaman demi halaman. Misalnya, sebuah aplikasi foto dengan ribuan gambar dapat melakukan kueri untuk subkumpulan data yang akan ditampilkan di halaman. Setiap halaman hasil yang dikembalikan oleh penyedia konten direpresentasikan oleh satu Cursor . Baik klien maupun penyedia harus mengimplementasikan {i>paging <i}untuk menggunakan fitur ini.
Untuk informasi mendetail tentang perubahan pada penyedia konten, lihat
ContentProvider
dan
ContentProviderClient
.
Permintaan pemuatan ulang konten
ContentProvider
dan
Sekarang masing-masing class ContentResolver
menyertakan
refresh()
, yang memudahkan klien untuk mengetahui apakah
bahwa informasi yang mereka minta
adalah informasi yang terbaru.
Anda dapat menambahkan logika pembaruan konten kustom dengan memperluas
ContentProvider
. Pastikan Anda mengganti
Metode refresh()
untuk ditampilkan
true
, yang menunjukkan kepada klien penyedia Anda bahwa Anda telah mencoba
untuk memuat ulang
data itu sendiri.
Aplikasi klien Anda bisa secara eksplisit meminta konten yang diperbarui dengan memanggil
metode berbeda, disebut juga
refresh()
. Saat memanggil ini
, teruskan URI data yang akan dimuat ulang.
Catatan: Karena Anda mungkin meminta data melalui jaringan,
Anda harus memanggil refresh()
dari
sisi klien hanya jika ada indikasi kuat
bahwa konten tersebut sudah usang.
Alasan paling umum untuk melakukan jenis pembaruan konten ini adalah sebagai respons terhadap
geser untuk memuat ulang
{i>gesture <i}yang secara eksplisit meminta UI saat ini untuk
menampilkan konten terbaru.
Peningkatan JobScheduler
Android 8.0 (API level 26) memperkenalkan sejumlah peningkatan pada JobScheduler
. Peningkatan ini memudahkan aplikasi Anda
untuk mematuhi latar belakang baru
batas eksekusi, karena umumnya Anda dapat menggunakan tugas terjadwal untuk menggantikan
layanan latar belakang yang sekarang dibatasi
atau penerima siaran implisit.
Update untuk JobScheduler
mencakup:
-
Sekarang Anda bisa menghubungkan antrean pekerjaan dengan tugas terjadwal. Untuk menambahkan item pekerjaan ke
antrean pekerjaan, panggil
JobScheduler.enqueue()
Saat sedang berjalan, tugas bisa mengambil pekerjaan yang tertunda dari antrean dan memprosesnya. Fungsi ini menangani banyak kasus penggunaan yang sebelumnya memiliki diperlukan untuk memulai layanan latar belakang, khususnya layanan yang mengimplementasikanIntentService
. -
Android
Support Library 26.0.0 memperkenalkan class
JobIntentService
baru, yang menyediakan berfungsi sebagaiIntentService
tetapi menggunakan tugas, bukan layanan saat berjalan di Android 8.0 (API level 26) atau yang lebih baru. -
Sekarang Anda dapat menelepon
JobInfo.Builder.setClipData()
untuk mengaitkanClipData
dengan tugas. Opsi ini memungkinkan Anda untuk mengaitkan pemberian izin URI dengan suatu tugas, mirip dengan cara izin akses dapat diterapkan keContext.startService()
. Anda juga dapat menggunakan pemberian izin URI dengan intent pada antrean pekerjaan. -
Tugas terjadwal sekarang mendukung beberapa batasan baru:
JobInfo.isRequireStorageNotLow()
- Tugas tidak berjalan jika penyimpanan perangkat yang tersedia rendah.
JobInfo.isRequireBatteryNotLow()
- Tugas tidak berjalan jika level baterai berada pada atau di bawah level kritis ambang batas; ini adalah tingkat saat perangkat menampilkan status Daya baterai lemah dialog sistem peringatan.
NETWORK_TYPE_METERED
- Tugas memerlukan koneksi jaringan berkuota, seperti sebagian besar data seluler project.
Penyimpanan data khusus
Android 8.0 (API level 26) memungkinkan Anda menyediakan penyimpanan data khusus sesuai preferensi, yang bisa berguna jika aplikasi Anda menyimpan preferensi di cloud atau database lokal, atau jika preferensinya khusus perangkat. Untuk mengetahui informasi selengkapnya tentang menerapkan penyimpanan data, lihat Penyimpanan Data Kustom.
Penyempurnaan media
VolumeShaper
Ada class VolumeShaper
baru. Gunakan
untuk melakukan transisi volume otomatis singkat seperti fade-in, fade-out, dan pudar silang.
Lihat Mengontrol Amplitudo dengan VolumeShaper
untuk mempelajari lebih lanjut.
Peningkatan fokus audio
Aplikasi audio berbagi keluaran audio pada perangkat dengan meminta dan mengabaikan fokus audio.
Aplikasi menangani perubahan di fokus dengan memulai atau menghentikan pemutaran, atau menurunkan volumenya.
Ada class AudioFocusRequest
baru. Menggunakan kelas ini sebagai parameter
requestAudioFocus()
,
aplikasi memiliki kemampuan baru saat menangani perubahan fokus audio:
pengecilan volume otomatis dan
perolehan fokus tertunda.
Metrik media
Metode getMetrics()
baru akan menampilkan PersistableBundle
objek yang berisi konfigurasi
dan informasi performa, dinyatakan sebagai peta atribut dan nilai.
Metode getMetrics()
ditentukan untuk class media berikut:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
Metrik dikumpulkan secara terpisah untuk setiap instance dan tetap ada selama masa aktif instance. Jika tidak ada metrik yang tersedia, metode akan menampilkan null. Metrik sebenarnya yang ditampilkan bergantung pada class-nya.
MediaPlayer
Mulai Android 8.0 (API level 26) MediaPlayer dapat memutar Dilindungi DRM dan media terenkripsi tingkat sampel HLS.
Android 8.0 memperkenalkan fitur overload baru
seekTo()
yang memberikan detail
saat mencari {i>frame<i}. Kode ini menyertakan parameter kedua yang menentukan mode pencarian:
SEEK_PREVIOUS_SYNC
memindahkan posisi media ke frame sinkronisasi (atau kunci) yang terhubung dengan sumber data yang terletak tepat sebelum atau pada waktu tertentu.SEEK_NEXT_SYNC
memindahkan posisi media ke frame sinkronisasi (atau kunci) yang terkait dengan sumber data yang terletak tepat setelah atau pada waktu tertentu.SEEK_CLOSEST_SYNC
memindahkan posisi media ke frame sinkronisasi (atau kunci) yang terkait dengan sumber data yang terletak paling dekat dengan atau pada waktu tertentu.SEEK_CLOSEST
memindahkan posisi media ke bingkai (tidak harus sinkron atau frame kunci) yang terkait dengan sumber data yang terletak paling dekat dengan atau pada waktu tertentu.
Saat mencari secara terus-menerus, aplikasi harus menggunakan salah satu mode SEEK_
, bukan SEEK_CLOSEST
, yang berjalan relatif lebih lambat tetapi dapat lebih akurat.
MediaRecorder
- MediaRecorder sekarang mendukung format MPEG2_TS yang berguna untuk
{i>streaming<i}:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaMuxer
kini dapat menangani sejumlah streaming audio dan video. Anda tidak lagi dibatasi ke satu trek audio dan/atau satu trek video. GunakanaddTrack()
untuk mencampur sebanyak mungkin lagu yang Anda inginkan.MediaMuxer
juga dapat menambahkan satu atau beberapa trek metadata yang berisi per frame yang ditentukan pengguna tidak akurat atau tidak sesuai. Format metadata didefinisikan oleh aplikasi Anda. Tujuan trek metadata hanya didukung untuk kontainer MP4.
Metadata dapat berguna untuk pemrosesan secara offline. Misalnya, sinyal giroskop dari sensor dapat digunakan untuk melakukan stabilisasi video.
Saat menambahkan trek metadata, format mime trek harus diawali dengan awalan
"aplikasi/". Menulis metadata sama seperti menulis data video/audio, kecuali
bahwa data tidak berasal dari MediaCodec
. Sebagai gantinya, aplikasi ini meneruskan
ByteBuffer
dengan stempel waktu yang terkait dengan
Metode writeSampleData()
.
Stempel waktu harus berada dalam basis waktu yang sama dengan trek video dan audio.
File MP4 yang dihasilkan menggunakan TextMetaDataSampleEntry
yang ditentukan di bagian
12.3.3.2 dari ISOBMFF untuk menandakan format mime metadata. Saat menggunakan MediaExtractor
untuk mengekstrak file dengan trek metadata, mime
format metadata yang akan diekstrak ke dalam MediaFormat
.
Akses file media yang ditingkatkan
Tujuan
Storage Access Framework (SAF) memungkinkan aplikasi mengekspos
DocumentsProvider
, yang dapat memberikan akses ke file
di sumber data ke aplikasi lain. Bahkan, seorang
penyedia dokumen bahkan
dapat menyediakan akses ke file
yang berada di penyimpanan jaringan atau
yang menggunakan protokol seperti
Media Transfer Protocol (MTP).
Namun, mengakses file media besar dari sumber data jarak jauh menimbulkan beberapa tantangan:
- Pemutar media memerlukan akses yang bisa dicari ke file dari penyedia dokumen. Dalam kasus di mana file media besar berada pada sumber data jarak jauh, penyedia dokumen harus mengambil semua data terlebih dahulu dan membuat snapshot deskriptor file. Pemutar media tidak dapat memutar file tanpa file sehingga pemutaran tidak bisa dimulai sampai penyedia dokumen selesai mengunduh file.
- Pengelola koleksi media, seperti aplikasi foto, harus melewati serangkaian mengakses URI untuk menjangkau media yang tersimpan di kartu SD eksternal melalui folder. Pola akses ini membuat operasi massal pada media—seperti memindahkan, menyalin, dan menghapus—cukup lambat.
- Pengelola koleksi media tidak dapat menentukan lokasi dokumen karena URI. Hal ini mempersulit jenis aplikasi tersebut untuk memungkinkan pengguna memilih lokasi penyimpanan file media.
Android 8.0 mengatasi setiap tantangan ini dengan meningkatkan Akses Penyimpanan Google Workspace.
Penyedia dokumen khusus
Mulai Android 8.0, Storage Access Framework memungkinkan dokumen khusus agar dapat membuat deskriptor file yang dapat dicari untuk file yang berada di sumber data jarak jauh. SAF dapat membuka file untuk mendapatkan file yang dapat dicari native deskripsi. SAF kemudian mengirimkan permintaan {i>byte<i} terpisah ke dokumen tersebut penyedia layanan. Fitur ini memungkinkan penyedia dokumen untuk menampilkan rentang yang tepat byte yang diminta aplikasi pemutar media, alih-alih meng-cache seluruh file terlebih dahulu.
Untuk menggunakan fitur ini, Anda harus memanggil metode
Metode StorageManager.openProxyFileDescriptor()
. Tujuan
Metode openProxyFileDescriptor()
menerima objek ProxyFileDescriptorCallback
sebagai callback. SAF memanggil
callback setiap kali aplikasi klien menjalankan operasi file pada
file deskriptor yang dikembalikan dari penyedia dokumen.
Akses dokumen langsung
Mulai dari Android 8.0 (API level 26), Anda dapat menggunakan
getDocumentUri()
metode untuk
mendapatkan URI yang merujuk ke dokumen yang sama dengan mediaUri
yang diberikan.
Namun, karena URI yang dikembalikan didukung oleh sebuah
DocumentsProvider
, pengelola koleksi media dapat mengakses
dokumen secara langsung, tanpa harus
melintasi pohon direktori {i>scope<i}.
Hasilnya, pengelola media bisa melakukan operasi file pada dokumen itu
jauh lebih cepat.
Perhatian: Metode getDocumentUri()
hanya mencari file media; tidak memberikan akses ke aplikasi
izin akses untuk mengakses
file-file tersebut. Untuk mempelajari lebih lanjut cara mendapatkan akses
izin akses ke file media, lihat
dokumentasi referensi.
Lokasi menuju dokumen
Saat menggunakan Storage Access Framework di Android 8.0 (API level 26), Anda bisa menggunakan
Metode findDocumentPath()
, tersedia di kedua
DocumentsContract
dan
DocumentsProvider
, untuk menentukan jalur dari root sistem file yang diberikan
ke ID. Metode ini menampilkan jalur ini dalam
Objek DocumentsContract.Path
. Dalam kasus di mana file
memiliki beberapa jalur yang didefinisikan ke dokumen yang sama, metode ini akan mengembalikan
jalur yang paling sering digunakan untuk
mencapai dokumen dengan ID yang diberikan.
Fungsionalitas ini sangat berguna dalam skenario berikut:
- Aplikasi Anda menggunakan "simpan sebagai" dialog yang menampilkan lokasi dokumen tertentu.
- Aplikasi Anda menampilkan folder dalam tampilan hasil penelusuran dan harus memuat folder turunan dokumen yang ada di dalam folder tertentu jika pengguna memilihnya folder tersebut.
Catatan: Jika aplikasi Anda memiliki izin untuk hanya mengakses beberapa dokumen
di jalur, nilai hasil findDocumentPath()
hanya mencakup
folder dan dokumen yang
dapat diakses oleh aplikasi Anda.
Memantau pemutaran audio
Layanan sistem AudioManager
menyimpan daftar
objek AudioPlaybackConfiguration
aktif, yang masing-masing
berisi informasi tentang sesi pemutaran audio tertentu. Aplikasi Anda dapat
mengambil rangkaian konfigurasi yang
sedang aktif dengan memanggil
getActivePlaybackConfigurations()
.
Mulai dari Android 8.0 (API level 26), Anda bisa mendaftarkan callback yang memberi tahu
aplikasi Anda saat satu atau beberapa
Objek AudioPlaybackConfiguration
telah berubah. Untuk melakukannya,
memanggil registerAudioPlaybackCallback()
, dengan meneruskan instance
AudioManager.AudioPlaybackCallback
. Tujuan
Class AudioManager.AudioPlaybackCallback
berisi atribut
Metode onPlaybackConfigChanged()
, yang dipanggil sistem saat audio
perubahan konfigurasi pemutaran.
Konektivitas
Wi-Fi Aware
Android 8.0 (level API 26) menambahkan dukungan untuk Wi-Fi Aware, yang didasarkan pada fitur Neighbor Spesifikasi Awareness Networking (NAN). Di perangkat dengan Hardware Wi-Fi Aware, aplikasi, dan perangkat di sekitar dapat menemukan dan berkomunikasi melalui Wi-Fi tanpa titik akses Internet. Kita bekerja dengan perangkat keras mitra untuk membawa teknologi Wi-Fi Aware ke perangkat sesegera mungkin. Sebagai Informasi tentang cara mengintegrasikan Wi-Fi Aware ke aplikasi Anda, lihat Wi-Fi Aware.
Bluetooth
Android 8.0 (API level 26) memperkaya dukungan Bluetooth platform dengan menambahkan fitur:
- Dukungan untuk standar AVRCP 1.4, yang memungkinkan penjelajahan koleksi-lagu.
- Dukungan untuk standar Bluetooth Low-Energy (BLE) 5.0.
- Integrasi codec Sony LDAC ke dalam tumpukan Bluetooth.
Penyambungan perangkat pendamping
Android 8.0 (API level 26) menyediakan API yang memungkinkan Anda menyesuaikan dialog permintaan penyambungan saat mencoba menyambungkan dengan perangkat pendamping Bluetooth, BLE, dan Wi-Fi. Untuk informasi selengkapnya, lihat Perangkat Pendamping Menyambungkan.
Untuk informasi selengkapnya tentang menggunakan Bluetooth di Android, lihat Panduan Bluetooth. Sebagai perubahan pada Bluetooth yang khusus untuk Android 8.0 (API level 26), lihat Bluetooth layanan Halaman Perubahan Perilaku Android 8.0.
Berbagi
Berbagi secara cerdas
Android 8.0 (API level 26) mempelajari pengalaman pengguna berbagi yang dipersonalisasi preferensi Anda dan lebih memahami untuk setiap jenis konten yang sesuai aplikasi untuk berbagi. Misalnya, jika pengguna mengambil foto tanda terima, Android 8.0 dapat menyarankan aplikasi pelacakan pengeluaran; jika pengguna mengambil foto selfie, bisa menangani gambar dengan lebih baik. Android 8.0 otomatis mempelajari semua ini pola yang sesuai dengan perilaku pengguna preferensi yang dipersonalisasi.
Berbagi cerdas berfungsi untuk jenis konten selain image
, seperti
audio
, video
, text
, URL
,
dll.
Untuk mengaktifkan Berbagi cerdas, tambahkan ArrayList
dari maksimal tiga
anotasi string ke intent yang membagikan konten tersebut. Anotasi harus
menjelaskan komponen atau topik utama dalam konten. Contoh kode berikut
menunjukkan cara menambahkan anotasi ke intent:
Kotlin
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
Java
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
Untuk informasi mendetail tentang anotasi Berbagi cerdas, lihat
EXTRA_CONTENT_ANNOTATIONS
.
Pengklasifikasi teks
Pada perangkat yang kompatibel, aplikasi bisa menggunakan Pengklasifikasi Teks baru untuk memeriksa apakah
string cocok dengan jenis entitas pengklasifikasi yang diketahui dan mendapatkan pilihan yang disarankan
alternatif. Entity yang dikenali oleh sistem
mencakup alamat, URL,
nomor telepon, dan alamat email. Untuk informasi selengkapnya, lihat
TextClassifier
.
Aksesibilitas
Android 8.0 (API level 26) mendukung sejumlah fitur aksesibilitas baru untuk developer yang membuat layanan aksesibilitas mereka sendiri:
- Kategori volume baru untuk penyesuaian aksesibilitas volume.
- Sidik jari gestur sebagai mekanisme input.
- Multibahasa text to speech ini.
- Solusi berbasis hardware aksesibilitas untuk mengakses layanan aksesibilitas pilihan dengan cepat.
- Dukungan untuk lanjutan gestur, atau urutan goresan terprogram.
- Channel aksesibilitas tombol untuk memanggil salah satu dari beberapa fitur aksesibilitas yang diaktifkan (hanya tersedia di perangkat yang menggunakan area navigasi yang dirender software).
- Standar nilai rentang satu sisi.
- Beberapa fitur untuk memproses teks dengan lebih mudah, termasuk teks petunjuk dan lokasi teks di layar karakter.
Keamanan & Privasi
Izin
Android 8.0 (API level 26) memperkenalkan beberapa izin baru yang berkaitan dengan telepon:
-
Izin
ANSWER_PHONE_CALLS
memungkinkan aplikasi Anda menjawab panggilan telepon masuk secara terprogram. Untuk menangani panggilan telepon masuk di aplikasi, Anda dapat menggunakanacceptRingingCall()
. -
Izin
READ_PHONE_NUMBERS
memberi aplikasi Anda akses baca ke nomor telepon yang disimpan di dalam perangkat.
Izin akses ini
diklasifikasikan sebagai
berbahaya
dan merupakan bagian dari
PHONE
grup izin akses.
Akses akun baru dan API penemuan
Android 8.0 (API level 26) memperkenalkan beberapa peningkatan pada aplikasi mendapatkan akses ke akun pengguna. Untuk akun yang mereka kelola, Otentikator dapat menggunakan kebijakan mereka sendiri untuk memutuskan apakah akan menyembunyikan akun, atau mengungkap akun, sebuah aplikasi. Sistem Android melacak aplikasi yang dapat mengakses akun tertentu.
Di versi Android sebelumnya, aplikasi yang ingin melacak daftar
akun pengguna harus mendapatkan pembaruan
tentang semua akun, termasuk akun dengan
jenis yang tidak terkait. Android 8.0 menambahkan
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
, yang memungkinkan aplikasi menentukan daftar jenis akun
perubahan akun yang harus diterima.
Perubahan API
AccountManager menyediakan enam metode baru untuk membantu otentikator mengelola aplikasi dapat melihat akun:
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: Menetapkan tingkat visibilitas untuk akun pengguna dan paket tertentu kombinasi.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: Mendapatkan tingkat visibilitas untuk akun pengguna dan paket tertentu kombinasi. -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: Memungkinkan pengautentikasi mendapatkan akun dan tingkat visibilitas untuk paket tertentu. -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: Memungkinkan pengautentikasi mendapatkan nilai visibilitas yang tersimpan untuk akun tertentu. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: Memungkinkan pengautentikasi melakukan inisialisasi nilai visibilitas akun. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: Menambahkan pemrosesOnAccountsUpdateListener
ke ObjekAccountManager
. Sistem memanggil pemroses ini kapan pun daftar akun di perangkat berubah.
Android 8.0 (API level 26) memperkenalkan dua nilai Nama Paket khusus untuk menentukan visibilitas
tingkat layanan untuk aplikasi yang tidak disetel menggunakan
setAccountVisibility(android.accounts.Account, java.lang.String, int)
. Tujuan
PACKAGE_NAME_KEY_LEGACY_VISIBLE
nilai visibilitas yang diterapkan ke aplikasi yang memiliki
GET_ACCOUNTS
izin akses, dan versi target dari
Android yang lebih lama dari Android 8.0, atau yang
cocok dengan otentikator
yang menargetkan versi Android apa pun.
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
memberikan nilai visibilitas default untuk
aplikasi yang belum ditetapkan sebelumnya dan yang
PACKAGE_NAME_KEY_LEGACY_VISIBLE
tidak
berlaku.
Untuk informasi selengkapnya tentang akses akun baru dan API penemuan, lihat
referensi untuk
AccountManager
dan
OnAccountsUpdateListener
.
Pengujian
Pengujian instrumentasi
Android 8.0 (level API 26) menyediakan dukungan tambahan berikut untuk uji instrumentasi.
Jalankan pada proses aplikasi non-default
Sekarang Anda dapat menentukan bahwa uji instrumentasi tertentu harus dijalankan pada proses di luar proses default aplikasi Anda. Konfigurasi ini berguna jika aplikasi Anda berisi beberapa aktivitas yang berjalan dalam proses berbeda.
Untuk menentukan instrumentasi proses non-default, buka manifes Anda
lalu ke folder yang diinginkan
Elemen <instrumentation>
. Tambahkan
android:targetProcess
, dan tetapkan nilainya ke salah satu
hal berikut:
- Nama proses tertentu.
- Daftar nama proses yang dipisah koma
- Karakter pengganti (
"*"
), yang memungkinkan instrumentasi berjalan terhadap setiap proses yang diluncurkan yang mengeksekusi kode dalam paket yang ditentukan dalam atributandroid:targetPackage
.
Ketika uji instrumentasi dijalankan, Anda dapat memeriksa proses mana
pengujiannya dengan memanggil getProcessName()
.
Laporkan hasil selama pengujian
Sekarang Anda dapat melaporkan hasil selagi uji instrumentasi dijalankan.
bukan setelahnya, dengan memanggil addResults()
.
Intent rekaan untuk pengujian
Untuk mempermudah pembuatan pengujian UI yang terisolasi dan independen untuk aplikasi Anda
Android 8.0 (API level 26) memperkenalkan
Metode onStartActivity()
. Anda mengganti metode ini dalam subclass kustom dari
Instrumentation.ActivityMonitor
untuk menangani
yang dipanggil oleh class pengujian Anda.
Saat class pengujian Anda memanggil intent, metode akan menampilkan stub
Objek Instrumentation.ActivityResult
, bukan mengeksekusi
intent itu sendiri. Dengan logika intent tiruan ini dalam pengujian, Anda dapat berfokus
tentang cara aktivitas Anda mempersiapkan dan menangani intent yang diteruskan ke
aktivitas yang berbeda atau ke aplikasi yang sama sekali berbeda.
Runtime & Peralatan
Optimalisasi platform
Android 8.0 (API level 26) menghadirkan waktu proses dan optimalisasi lainnya ke platform yang akan menghasilkan sejumlah peningkatan performa. Pengoptimalan ini mencakup pembersihan sampah memori serentak, penggunaan memori yang lebih efisien, dan lokalitas kode.
Pengoptimalan ini menghasilkan waktu booting yang lebih cepat, serta performa yang lebih baik pada OS dan aplikasi.
Dukungan bahasa Java yang diperbarui
Android 8.0 (API level 26) menambahkan dukungan untuk beberapa API Java OpenJDK tambahan:
java.time
dari OpenJDK 8.java.nio.file
danjava.lang.invoke
dari OpenJDK 7.
Untuk mempelajari lebih lanjut class dan metode dalam class yang baru ditambahkan ini paket, lihat dokumentasi referensi API.
Jika Anda ingin menggunakan fitur bahasa Java 8 di Android Studio, Anda harus download versi pratinjau terbaru.
ICU4J Android Framework API yang diupdate
Android 8.0 (API level 26) memperluas
Framework Android ICU4J
API—yang merupakan subset dari ICU4J API—bagi developer aplikasi untuk
gunakan pada paket android.icu
. API ini menggunakan data pelokalan
ada di perangkat, sehingga Anda bisa mengurangi footprint APK dengan tidak mengompilasi
library ICU4J di APK Anda.
Level Android API | Versi ICU | Versi CLDR | Versi Unicode |
---|---|---|---|
Android 7.0 (API level 24), Android 7.1 (API level 25) | 56 | 28 | 8.0 |
Android 8.0 (API level 26) | 58.2 | 30.0.3 | 9.0 |
Untuk informasi selengkapnya tentang internasionalisasi di Android, termasuk Dukungan ICU4J, lihat Internasionalisasi di Android.
Android enterprise
Fitur dan API perusahaan baru telah diperkenalkan untuk perangkat yang menjalankan Android 8.0 (level API 26). Sorotan mencakup:
- Profil kerja pada perangkat terkelola sepenuhnya memungkinkan perusahaan memisahkan pekerjaan dari data pribadi, sambil mengelola keduanya.
- Delegasi API memungkinkan pemilik perangkat dan pemilik profil menetapkan aplikasi manajemen proyek ke aplikasi lain.
- Peningkatan pengalaman pengguna dalam alur penyediaan (termasuk pilihan kustomisasi) mengurangi waktu pengaturan.
- Kontrol baru atas Bluetooth, Wi-Fi, pencadangan, dan keamanan memungkinkan perusahaan mengelola lebih banyak bagian perangkat. Logging aktivitas jaringan membantu perusahaan melacak masalah menurun.
Untuk mempelajari hal ini serta fitur dan API perusahaan Android baru lainnya, lihat Android di Enterprise.