Android 8.0 (API level 26) memperkenalkan berbagai fitur dan kemampuan baru bagi pengguna dan developer. Dokumen ini merangkum apa saja yang baru untuk developer.
Pastikan Anda juga memeriksa Perubahan Perilaku Android 8.0 untuk mempelajari area mana saja pada aplikasi Anda yang dapat terpengaruh oleh perubahan platform.
Pengalaman Pengguna
Mode Gambar-dalam-Gambar
Picture-in-picture di Android 8.0.
Android 8.0 (API level 26) memungkinkan peluncuran aktivitas dalam mode picture-in-picture (PIP). PIP adalah jenis khusus mode multi-aplikasi yang sebagian besar digunakan untuk pemutaran video. Mode PIP awalnya hanya tersedia untuk Android TV; Android 8.0 menyediakan fitur ini di perangkat Android lainnya.
Saat berada dalam mode PIP, aktivitas berada dalam status dijeda, tetapi harus
terus menampilkan konten. Karena alasan ini, Anda harus memastikan aplikasi
tidak menjeda pemutaran di pengendali onPause()
-nya. Sebagai gantinya, sebaiknya jeda video dalam onStop()
, dan lanjutkan pemutaran dalam onStart()
. Untuk mengetahui informasi selengkapnya, lihat
Siklus Proses
Multi-Aplikasi.
Untuk menentukan agar aktivitas Anda dapat menggunakan mode PIP, setel
android:supportsPictureInPicture
ke benar dalam manifes.
(Mulai Android 8.0, PIP tidak memerlukan
atribut manifes android:resizeableActivity
.
Namun, Anda harus menyetel
android:resizeableActivity
ke `true` jika aktivitas Anda mendukung
mode multi-aplikasi lainnya.)
Android 8.0 (API level 26) memperkenalkan objek baru, PictureInPictureParams
,
yang Anda teruskan ke metode PIP untuk menentukan perilaku aktivitas
saat berada dalam mode PIP. Objek ini menentukan properti seperti
rasio aspek pilihan 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 dalam args yang kosong, sistem akan menggunakan nilai yang ditetapkan saat terakhir kali Anda memanggilActivity.setPictureInPictureParams()
.Aktivitas yang ditentukan ditempatkan di sudut layar; sisa layar akan diisi dengan aktivitas sebelumnya yang ada di layar. Aktivitas yang memasuki mode PIP beralih ke status dijeda, tetapi tetap dimulai. Jika pengguna mengetuk aktivitas PIP, sistem akan menampilkan menu untuk berinteraksi dengan pengguna; tidak ada peristiwa sentuh yang mencapai aktivitas saat dalam status PIP.
-
Activity.setPictureInPictureParams()
: Memperbarui setelan konfigurasi PIP aktivitas. Setelan akan diperbarui jika aktivitas saat ini berada dalam mode PIP; ini berguna jika rasio aspek aktivitas berubah. Jika aktivitas tersebut tidak berada dalam mode PIP, setelan konfigurasi ini akan 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 dan setelan notifikasi. Perubahan ini mencakup:
- Saluran notifikasi: Android 8.0 memperkenalkan saluran notifikasi yang memungkinkan Anda membuat saluran yang dapat disesuaikan pengguna untuk setiap jenis notifikasi yang ingin ditampilkan. Antarmuka pengguna menyebut saluran notifikasi sebagai kategori notifikasi. Untuk mempelajari cara 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 mempelajari cara menggunakan titik notifikasi, lihat Badge notifikasi.
- Menunda: Pengguna dapat menunda notifikasi, yang menyebabkan notifikasi menghilang selama jangka waktu tertentu sebelum muncul kembali. Notifikasi akan muncul kembali dengan tingkat kepentingan yang sama seperti saat pertama kali muncul. Aplikasi dapat menghapus atau mengupdate notifikasi yang ditunda, tetapi mengupdate notifikasi yang ditunda tidak menyebabkan notifikasi tersebut muncul kembali.
- Waktu tunggu notifikasi: Anda dapat menyetel waktu tunggu saat membuat
notifikasi menggunakan
setTimeoutAfter()
. Anda dapat menggunakan metode ini untuk menentukan durasi notifikasi harus dibatalkan. Jika diperlukan, Anda dapat membatalkan notifikasi sebelum durasi waktu tunggu yang ditetapkan berlalu. - Setelan notifikasi: Anda dapat memanggil
setSettingsText()
untuk menyetel teks yang muncul saat Anda membuat link ke setelan notifikasi aplikasi dari notifikasi menggunakan intentNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
. Sistem dapat menyediakan tambahan berikut dengan intent untuk memfilter setelan yang harus ditampilkan aplikasi Anda kepada pengguna:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
, danNOTIFICATION_ID
. - Penutupan notifikasi: Pengguna dapat menutup notifikasi sendiri, dan
aplikasi dapat menghapusnya secara terprogram. Anda dapat menentukan kapan notifikasi ditutup dan alasan notifikasi ditutup dengan mengimplementasikan metode
onNotificationRemoved()
dari classNotificationListenerService
. - Warna latar belakang: Anda dapat menetapkan dan mengaktifkan warna latar belakang untuk notifikasi. Sebaiknya hanya gunakan fitur ini dalam notifikasi untuk
tugas yang sedang berlangsung yang perlu dilihat secara sekilas oleh pengguna. Misalnya, Anda dapat menyetel warna latar belakang untuk notifikasi yang terkait dengan rute mobil, atau panggilan telepon yang sedang berlangsung. Anda juga dapat menetapkan warna latar belakang yang diinginkan menggunakan
setColor()
. Cara tersebut memungkinkan Anda menggunakansetColorized()
untuk mengaktifkan penggunaan warna latar belakang bagi notifikasi. - Gaya pesan: Di Android 8.0, notifikasi yang menggunakan class
MessagingStyle
menampilkan 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 untuk notifikasi terkait pesan.
![Menu penekanan lama notifikasi di Android 8.0 (API level 26).](https://developer.android.google.cn/static/images/about/versions/oreo/notification-long-press.png?authuser=19&hl=id)
Pengguna dapat menekan lama ikon peluncur aplikasi untuk melihat notifikasi di Android 8.0.
Framework isi otomatis
Transaksi pembuatan akun, login, dan kartu kredit membutuhkan waktu dan rentan terhadap error. Pengguna dapat mudah merasa frustrasi dengan aplikasi yang memerlukan jenis tugas berulang ini.
Android 8.0 (API level 26) mempermudah pengisian formulir, seperti login dan formulir kartu kredit, dengan pengenalan Framework Isi Otomatis. Aplikasi yang sudah ada dan yang baru akan berfungsi dengan Framework Isi Otomatis setelah pengguna memilih untuk menggunakan 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
Dengan Android 8.0 (API level 26) dan Android Support Library 26, Anda dapat meminta font dari aplikasi penyedia, bukan memaketkan font ke dalam APK atau membiarkan APK mendownload font. Fitur ini mengurangi ukuran APK, meningkatkan tingkat keberhasilan penginstalan aplikasi, 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, yaitu Font dalam XML, yang
memungkinkan Anda menggunakan font sebagai resource. Artinya, Anda tidak perlu memaketkan font
sebagai aset. Font dikompilasi dalam file R
dan secara otomatis
tersedia dalam sistem sebagai resource. Anda kemudian dapat mengakses font ini dengan
bantuan jenis resource baru, font
.
Support Library 26 memberikan dukungan penuh untuk fitur ini di perangkat yang menjalankan API versi 14 dan yang lebih tinggi.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan font sebagai resource dan mengambil font sistem, lihat Font dalam XML.
Pengubahan Ukuran Otomatis TextView
Android 8.0 (level API 26) memungkinkan Anda menyetel ukuran teks yang diperluas atau dikontrak secara otomatis berdasarkan ukuran TextView. Artinya, akan jauh lebih mudah untuk mengoptimalkan ukuran teks pada layar yang berbeda 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 efek visual, dan dapat menampilkan beragam bentuk di berbagai model perangkat. Untuk mempelajari cara membuat ikon adaptif, lihat panduan Ikon Adaptif.
Manajemen warna
Developer Android untuk aplikasi pencitraan kini dapat memanfaatkan perangkat baru yang memiliki kemampuan tampilan warna gamut-lebar. Untuk menampilkan gambar gamut lebar, aplikasi harus mengaktifkan tanda dalam manifesnya (per aktivitas) dan memuat bitmap dengan profil warna lebar tersemat (AdobeRGB, Pro Photo RGB, DCI-P3, dll.).
WebView API
Android 8.0 menyediakan beberapa API untuk membantu Anda mengelola
objek WebView
yang menampilkan konten web di aplikasi Anda.
API ini, yang meningkatkan stabilitas dan keamanan aplikasi Anda, meliputi
hal berikut:
- 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
Google Safe Browsing API.
Penyematan pintasan dan widget
Android 8.0 (API level 26) memperkenalkan penyematan pintasan dan widget dalam aplikasi. Di aplikasi, Anda dapat membuat widget dan pintasan tersemat untuk peluncur yang didukung, sesuai dengan izin pengguna.
Untuk mengetahui informasi selengkapnya, lihat panduan fitur Menyematkan Pintasan dan Widget.
Rasio aspek layar maksimum
Android 8.0 (API level 26) menghadirkan perubahan pada cara mengonfigurasi rasio aspek maksimum aplikasi.
Pertama, Android 8.0 memperkenalkan atribut maxAspectRatio, yang dapat Anda gunakan untuk menyetel rasio aspek maksimum aplikasi. Selain itu, di Android 8.0 dan yang lebih tinggi, rasio aspek maksimum default aplikasi adalah rasio aspek native perangkat tempat aplikasi berjalan.
Untuk mengetahui informasi selengkapnya tentang mendeklarasikan rasio aspek maksimum, lihat Mendukung Beberapa Layar.
Dukungan multi-tampilan
Mulai Android 8.0 (API level 26), platform ini menawarkan dukungan yang ditingkatkan untuk multi-tampilan. 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 meluncurkan aktivitas, aplikasi dapat menentukan tampilan mana yang harus digunakan untuk menjalankan aktivitas.
Catatan: Jika suatu aktivitas mendukung mode multi-aplikasi, Android 8.0 akan otomatis mengaktifkan dukungan multi-tampilan untuk aktivitas tersebut. Anda harus menguji aplikasi untuk memastikannya berfungsi secara memadai di lingkungan multi-tampilan.
Hanya satu aktivitas pada satu waktu yang dapat berada dalam status dilanjutkan, meskipun aplikasi memiliki beberapa tampilan. Aktivitas yang difokuskan berada dalam status dilanjutkan; semua aktivitas yang terlihat lainnya akan dijeda, tetapi tidak dihentikan. Untuk informasi selengkapnya tentang siklus proses aktivitas ketika beberapa aktivitas terlihat, lihat Siklus Proses Multi-Aplikasi.
Saat pengguna memindahkan aktivitas dari satu tampilan ke tampilan lainnya, sistem akan mengubah ukuran aktivitas dan menerbitkan perubahan runtime seperlunya. Aktivitas Anda dapat menangani perubahan konfigurasi itu sendiri, atau memungkinkan sistem menghancurkan proses yang berisi aktivitas Anda dan membuatnya kembali dengan dimensi baru. Untuk mengetahui informasi selengkapnya, lihat Menangani Perubahan Konfigurasi.
ActivityOptions
menyediakan dua metode baru untuk mendukung
beberapa tampilan:
setLaunchDisplayId()
- Menentukan tampilan tempat aktivitas harus ditampilkan saat diluncurkan.
getLaunchDisplayId()
- Menampilkan tampilan peluncuran aktivitas saat ini.
Shell adb diperluas untuk mendukung multitampilan.
Perintah shell start
sekarang dapat digunakan untuk meluncurkan aktivitas,
dan menentukan tampilan target aktivitas:
adb shell start <activity_name> --display <display_id>
Margin layout gabungan dan pengisi
Android 8.0 (level API 26) memudahkan Anda menentukan situasi ketika sisi yang berlawanan dari
elemen View
menggunakan margin atau padding yang sama.
Secara khusus, kini Anda dapat menggunakan atribut berikut dalam file XML
tata letak:
-
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 diperhatikan bahwa atribut
ini tidak memengaruhi 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 diuntungkan jika dapat mengontrol kursor mouse. Rekaman pointer adalah fitur baru di Android 8.0 (API level 26) yang menyediakan kontrol tersebut dengan mengirimkan semua peristiwa mouse ke tampilan yang difokuskan di aplikasi Anda.
Mulai Android 8.0, View
di aplikasi Anda dapat meminta
tangkapan pointer dan menentukan pemroses untuk memproses peristiwa pointer yang direkam. Pointer mouse disembunyikan saat berada dalam mode ini. Tampilan ini dapat merilis rekaman pointer
saat informasi mouse tidak diperlukan lagi. Sistem juga dapat merilis
tangkapan pointer saat tampilan kehilangan fokus, misalnya, saat pengguna membuka
aplikasi lain.
Untuk mengetahui informasi tentang cara menggunakan fitur ini di aplikasi Anda, lihat Rekaman pointer.
Kategori aplikasi
Android 8.0 (level API 26) memungkinkan setiap aplikasi mendeklarasikan kategori yang sesuai, jika relevan. Kategori ini digunakan untuk mengelompokkan aplikasi dengan tujuan atau fungsi
yang serupa saat menampilkannya kepada pengguna, seperti dalam Penggunaan Data, Penggunaan Baterai, atau
Penggunaan Penyimpanan. Anda dapat menentukan kategori untuk aplikasi dengan menyetel
atribut android:appCategory
di tag manifes
<application>
Anda.
Peluncur Android TV
Android 8.0 (level API 26) menyertakan pengalaman layar utama Android TV yang berfokus pada konten baru, yang tersedia dengan 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 yang ingin mereka lihat di layar utama. Layar utama Android TV juga menyertakan baris Tonton Berikutnya, yang diisi dengan program dari aplikasi, berdasarkan kebiasaan menonton pengguna. Aplikasi juga dapat menyediakan pratinjau video, yang akan otomatis diputar saat pengguna berfokus pada sebuah program. API untuk mengisi saluran dan program merupakan bagian dari TvProvider API, yang didistribusikan sebagai modul Support Library Android dengan Android 8.0.
AnimatorSet
Mulai Android 8.0 (level API 26), AnimatorSet
API kini mendukung pencarian dan pemutaran secara
terbalik. Pencarian memungkinkan Anda menyetel posisi animasi yang disetel ke titik
waktu tertentu. Pemutaran secara terbalik berguna jika aplikasi Anda menyertakan animasi untuk tindakan yang dapat diurungkan. Daripada menentukan dua set animasi
terpisah, Anda dapat memutar animasi 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 grup elemen UI ke dalam cluster untuk memudahkan navigasi keyboard di antara elemen-elemen tersebut. Pengguna dapat menekan Meta+Tab, atau Search+Tab di perangkat Chromebook, untuk berpindah dari satu cluster ke cluster lain. Contoh cluster yang bagus meliputi: panel samping, menu navigasi, area konten utama, dan elemen yang dapat berisi banyak elemen turunan.
![Contoh aktivitas yang menyertakan lima cluster navigasi yang dapat dijelajahi pengguna
menggunakan pintasan cluster navigasi keyboard. Cluster
muncul dalam susunan berikut: panel atas, panel samping kiri, area konten
utama, panel bawah, dan tombol tindakan mengambang (FAB).](https://developer.android.google.cn/static/images/about/versions/oreo/keyboard-navigation-clusters.png?authuser=19&hl=id)
Untuk membuat elemen View
atau ViewGroup
sebagai cluster, tetapkan
atribut
android:keyboardNavigationCluster
ke
true
dalam file XML tata letak elemen, atau teruskan true
ke setKeyboardNavigationCluster()
dalam logika UI aplikasi Anda.
Catatan: Cluster tidak dapat disusun bertingkat, meskipun cluster
yang tidak bertingkat dapat muncul pada tingkat hierarki yang berbeda. Jika Anda mencoba
membuat cluster bertingkat, framework hanya akan memperlakukan elemen
ViewGroup
teratas sebagai cluster.
Pada perangkat yang memiliki layar sentuh, Anda dapat menetapkan elemen
android:touchscreenBlocksFocus
objek ViewGroup
yang ditetapkan cluster ke true
untuk
mengizinkan navigasi khusus cluster ke dalam dan keluar dari cluster tersebut. Jika Anda menerapkan
konfigurasi ini ke cluster, pengguna tidak dapat menggunakan tombol Tab atau tombol panah untuk
membuka atau keluar dari cluster; mereka harus menekan kombinasi keyboard
navigasi cluster.
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 navigasi keyboard, seperti tombol tab. Untuk menerapkan setelan "difokuskan secara default"
ini, tetapkan atribut
android:focusedByDefault
elemen View
ke true
dalam
file XML tata letak yang berisi elemen UI, atau teruskan true
ke
setFocusedByDefault()
dalam
logika UI aplikasi Anda.
Output ucapan
Aktivitas dan layanan dapat menggunakan instance
TextToSpeech
untuk mendikte dan mengucapkan konten. Mulai
Android 8.0 (API level 26), aplikasi Anda dapat memperoleh informasi pengaturan waktu yang lebih tepat
tentang kapan mesin text-to-speech mulai mengucapkan kata-kata yang disintesis individual,
selama mesin tersebut memberikan informasi ini. Anda dapat menggunakan fungsi ini
untuk menarik perhatian pada kata tertentu saat mesin text-to-speech mengucapkannya.
Untuk menggunakan peningkatan mesin text-to-speech ini di aplikasi Anda, daftarkan
instance UtteranceProgressListener
. Sebagai bagian dari
proses pendaftaran, sertakan pengendali untuk
metode
onRangeStart()
.
Mesin text-to-speech memanggil
rangeStart()
untuk merekam
titik waktu saat mesin tersebut mengharapkan pemutaran audio dari rentang teks tertentu
akan dimulai. Saat audio untuk rentang teks tersebut memulai pemutaran, metode
onRangeStart()
aplikasi Anda akan dieksekusi. Aplikasi Anda kemudian dapat merespons callback ini, misalnya dengan
menandai rentang teks yang terkait dengan ucapan tersebut.
Untuk mengetahui informasi selengkapnya tentang melacak progres pemutaran mesin
text-to-speech, lihat referensi
class UtteranceProgressListener
.
Sistem
Detektor StrictMode baru
Android 8.0 (API level 26) menambahkan tiga detektor StrictMode baru untuk membantu mengidentifikasi potensi bug dalam aplikasi Anda:
detectUnbufferedIo()
akan mendeteksi saat aplikasi Anda membaca atau menulis data tanpa buffering, yang dapat memengaruhi performa secara drastis.detectContentUriWithoutPermission()
akan mendeteksi saat aplikasi Anda tidak sengaja lupa memberikan izin ke aplikasi lain saat memulai Aktivitas di luar aplikasi.detectUntaggedSockets()
akan mendeteksi saat aplikasi menjalankan traffic jaringan tanpa menggunakansetThreadStatsTag(int)
untuk memberi tag pada traffic untuk tujuan proses debug.
Data dalam cache
Android 8.0 (level API 26) memberikan panduan dan perilaku yang lebih baik seputar data yang di-cache. Setiap
aplikasi kini diberi kuota ruang disk untuk data yang di-cache, seperti yang ditampilkan oleh
getCacheQuotaBytes(UUID)
.
Jika perlu mengosongkan ruang disk, sistem akan memulai dengan menghapus file yang di-cache dari aplikasi yang memiliki penggunaan kuota paling banyak. Jadi, jika Anda mempertahankan data yang di-cache di bawah kuota yang dialokasikan, file yang di-cache akan menjadi beberapa file yang terakhir dihapus di sistem saat diperlukan. Saat menentukan file yang di-cache yang akan dihapus dalam aplikasi, sistem akan mempertimbangkan file terlama terlebih dahulu (sebagaimana ditentukan oleh waktu yang diubah).
Ada juga dua perilaku baru yang dapat Anda aktifkan per direktori untuk mengontrol cara sistem mengosongkan data yang di-cache:
StorageManager.setCacheBehaviorAtomic()
dapat digunakan untuk menunjukkan bahwa direktori dan semua isinya harus dihapus sebagai unit atom tunggal.setCacheBehaviorTombstone(File, boolean)
dapat digunakan untuk menunjukkan bahwa bukannya menghapus file di dalam direktori, file tersebut harus dipotong dengan panjang 0 byte sehingga file kosong tetap utuh.
Terakhir, saat Anda perlu mengalokasikan ruang disk untuk file besar, pertimbangkan untuk menggunakan allocateBytes(FileDescriptor, long)
API baru, yang akan otomatis menghapus file yang disimpan dalam cache milik aplikasi lain (jika diperlukan) untuk memenuhi permintaan Anda. Saat menentukan apakah
perangkat memiliki ruang disk yang cukup untuk menyimpan data baru, panggil
getAllocatableBytes(UUID)
, bukan menggunakan
getUsableSpace()
, karena data yang disimpan dalam cache akan mempertimbangkan semua data
yang di-cache yang ingin dihapus oleh sistem untuk Anda.
Paging penyedia konten
Kami telah memperbarui penyedia konten untuk menyertakan dukungan untuk memuat set data besar satu halaman dalam satu waktu. Misalnya, aplikasi foto dengan ribuan gambar dapat membuat kueri untuk subset data yang akan ditampilkan di halaman. Setiap halaman hasil yang ditampilkan oleh penyedia konten direpresentasikan oleh satu objek Cursor. Baik klien maupun penyedia harus mengimplementasikan paging untuk memanfaatkan fitur ini.
Untuk informasi selengkapnya tentang perubahan pada penyedia konten, lihat
ContentProvider
dan
ContentProviderClient
.
Permintaan pemuatan ulang konten
Class ContentProvider
dan
ContentResolver
kini masing-masing menyertakan
metode refresh()
, yang memudahkan klien mengetahui apakah
informasi yang mereka minta adalah yang terbaru.
Anda dapat menambahkan logika pemuatan ulang konten kustom dengan memperluas
ContentProvider
. Pastikan Anda mengganti
metode refresh()
untuk menampilkan
true
, yang menunjukkan kepada klien penyedia bahwa Anda telah mencoba
memperbarui data sendiri.
Aplikasi klien Anda dapat secara eksplisit meminta konten yang dimuat ulang dengan memanggil
metode lain, yang disebut juga
refresh()
. Saat memanggil
metode 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 tidak berlaku.
Alasan paling umum untuk melakukan jenis refresh konten ini adalah sebagai respons terhadap
gestur geser untuk refresh, 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 mematuhi batas eksekusi
latar belakang yang baru, karena secara umum Anda dapat menggunakan tugas terjadwal untuk menggantikan
layanan latar belakang atau penerima siaran implisit yang kini dibatasi.
Update untuk JobScheduler
mencakup:
-
Sekarang Anda bisa menghubungkan antrean pekerjaan dengan tugas terjadwal. Untuk menambahkan item pekerjaan ke
antrean tugas, panggil
JobScheduler.enqueue()
. Saat sedang berjalan, tugas bisa mengambil pekerjaan yang tertunda dari antrean dan memprosesnya. Fungsi ini menangani banyak kasus penggunaan yang sebelumnya akan memanggil untuk memulai layanan latar belakang, khususnya layanan yang mengimplementasikanIntentService
. -
Android
Support Library 26.0.0 memperkenalkan class
JobIntentService
baru, yang menyediakan fungsi yang sama denganIntentService
tetapi menggunakan tugas, bukan layanan saat berjalan di Android 8.0 (API level 26) atau yang lebih tinggi. -
Sekarang Anda dapat memanggil
JobInfo.Builder.setClipData()
untuk mengaitkanClipData
dengan tugas. Opsi ini memungkinkan Anda mengaitkan pemberian izin URI dengan suatu tugas, mirip dengan cara izin ini dapat disebarkan 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 hampir penuh.
JobInfo.isRequireBatteryNotLow()
- Tugas tidak akan berjalan jika level baterai berada pada atau di bawah batas penting; ini adalah level saat perangkat menampilkan dialog sistem Peringatan baterai rendah.
NETWORK_TYPE_METERED
- Tugas memerlukan koneksi jaringan berkuota, seperti kebanyakan paket data seluler.
Penyimpanan data khusus
Android 8.0 (API level 26) memungkinkan Anda menyediakan penyimpanan data kustom sesuai preferensi, yang dapat berguna jika aplikasi menyimpan preferensi tersebut di cloud atau database lokal, atau jika preferensi tersebut khusus perangkat. Untuk informasi selengkapnya tentang menerapkan penyimpanan data, lihat Penyimpanan Data Kustom.
Penyempurnaan media
VolumeShaper
Ada class VolumeShaper
baru. Gunakan
fitur ini untuk melakukan transisi volume otomatis singkat seperti fade-in, fade-out, dan cross fade.
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. Dengan menggunakan class ini sebagai parameter
requestAudioFocus()
,
aplikasi memiliki kemampuan baru saat menangani perubahan dalam fokus audio:
pengecilan volume otomatis dan
perolehan fokus tertunda.
Metrik media
Metode getMetrics()
baru menampilkan objek PersistableBundle
yang berisi informasi konfigurasi dan performa, yang 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 materi yang dilindungi DRM dan media terenkripsi tingkat sampel HLS.
Android 8.0 memperkenalkan perintah seekTo()
overload baru yang memberikan kontrol terperinci saat mencoba melakukan frame. Contoh ini menyertakan parameter kedua yang menentukan mode pencarian:
SEEK_PREVIOUS_SYNC
memindahkan posisi media ke frame sinkronisasi (atau tombol) yang terkait dengan sumber data yang terletak tepat sebelum atau pada waktu tertentu.SEEK_NEXT_SYNC
memindahkan posisi media ke frame sinkronisasi (atau tombol) 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 terdekat dengan atau pada waktu tertentu.SEEK_CLOSEST
memindahkan posisi media ke frame (tidak harus sinkronisasi atau frame kunci) yang terkait dengan sumber data yang terletak paling dekat dengan atau pada waktu tertentu.
Saat melakukan pencarian secara terus-menerus, aplikasi harus menggunakan salah satu mode SEEK_
, bukan SEEK_CLOSEST
, yang berjalan relatif lebih lambat tetapi dapat lebih tepat.
MediaRecorder
- MediaRecorder kini mendukung format MPEG2_TS yang berguna untuk
streaming:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaMuxer
kini dapat menangani berapa pun streaming audio dan video. Anda tidak lagi terbatas pada 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 informasi per frame yang ditentukan pengguna. Format metadata didefinisikan oleh aplikasi Anda. Trek metadata hanya didukung untuk penampung 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
"application/". Menulis metadata sama seperti menulis data video/audio, kecuali
bahwa data tidak berasal dari MediaCodec
. Sebagai gantinya, aplikasi akan meneruskan
ByteBuffer
dengan stempel waktu terkait ke
metode writeSampleData()
.
Stempel waktu harus berada dalam basis waktu yang sama dengan trek video dan audio.
File MP4 yang dihasilkan menggunakan TextMetaDataSampleEntry
yang ditentukan dalam
bagian 12.3.3.2 ISOBMFF untuk memberi sinyal format mime metadata. Saat menggunakan MediaExtractor
untuk mengekstrak file dengan trek metadata, format
mime metadata akan diekstrak ke MediaFormat
.
Akses file media yang ditingkatkan
Storage Access Framework (SAF) memungkinkan aplikasi mengekspos
DocumentsProvider
kustom, yang dapat memberikan akses ke file
dalam sumber data ke aplikasi lain. Bahkan, penyedia dokumen bahkan dapat memberikan 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 memunculkan beberapa tantangan:
- Pemutar media memerlukan akses yang bisa dicari ke file dari penyedia dokumen. Jika sebuah file media besar berada di sumber data jarak jauh, penyedia dokumen harus mengambil semua data terlebih dahulu dan membuat deskriptor file snapshot. Media player tidak dapat memutar file tanpa deskriptor file, sehingga pemutaran tidak dapat dimulai hingga penyedia dokumen selesai mendownload file tersebut.
- Pengelola koleksi media, seperti aplikasi foto, harus melintasi serangkaian URI akses untuk menjangkau media yang disimpan di kartu SD eksternal melalui folder cakupan. Pola akses ini membuat operasi massal pada media—seperti memindahkan, menyalin, dan menghapus—menjadi sangat lambat.
- Pengelola koleksi media tidak dapat menentukan lokasi dokumen mengingat URI-nya. Hal ini menyulitkan jenis aplikasi ini untuk memungkinkan pengguna memilih tempat menyimpan file media.
Android 8.0 mengatasi masing-masing tantangan ini dengan meningkatkan Storage Access Framework.
Penyedia dokumen khusus
Mulai Android 8.0, Storage Access Framework memungkinkan penyedia dokumen kustom membuat deskriptor file yang dapat dicari untuk file yang berada dalam sumber data jarak jauh. SAF dapat membuka file untuk mendapatkan deskriptor file native yang dapat dicari. SAF kemudian akan mengirimkan permintaan byte terpisah ke penyedia dokumen. Fitur ini memungkinkan penyedia dokumen menampilkan rentang byte yang tepat yang telah diminta aplikasi pemutar media, bukan menyimpan seluruh file dalam cache terlebih dahulu.
Untuk menggunakan fitur ini, Anda perlu memanggil metode
StorageManager.openProxyFileDescriptor()
baru. Metode
openProxyFileDescriptor()
menerima objek ProxyFileDescriptorCallback
sebagai callback. SAF memanggil callback setiap kali aplikasi klien menjalankan operasi file pada deskriptor file yang ditampilkan dari penyedia dokumen.
Akses dokumen langsung
Mulai dari Android 8.0 (level API 26), Anda dapat menggunakan
metode getDocumentUri()
untuk
mendapatkan URI yang mereferensikan dokumen yang sama seperti mediaUri
yang diberikan.
Namun, karena URI yang ditampilkan didukung oleh
DocumentsProvider
, pengelola koleksi media dapat mengakses
dokumen secara langsung, tanpa harus melintasi hierarki direktori yang dicakup.
Hasilnya, pengelola media dapat melakukan operasi file pada dokumen
dengan jauh lebih cepat.
Perhatian: Metode getDocumentUri()
hanya menemukan file media; metode ini tidak memberikan izin kepada aplikasi
untuk mengakses file tersebut. Untuk mempelajari lebih lanjut cara mendapatkan izin
akses ke file media, lihat dokumentasi referensi.
Lokasi menuju dokumen
Saat menggunakan Storage Access Framework di Android 8.0 (API level 26), Anda dapat menggunakan
metode findDocumentPath()
, yang tersedia di class
DocumentsContract
dan
DocumentsProvider
, untuk menentukan jalur dari root sistem file yang diberi ID
dokumen. Metode ini menampilkan jalur ini dalam objek DocumentsContract.Path
. Jika sistem file memiliki beberapa jalur yang ditentukan ke dokumen yang sama, metode akan menampilkan jalur yang paling sering digunakan untuk menjangkau dokumen dengan ID yang diberikan.
Fungsionalitas ini sangat berguna dalam skenario berikut:
- Aplikasi Anda menggunakan dialog "simpan sebagai" yang menampilkan lokasi dokumen tertentu.
- Aplikasi Anda menampilkan folder dalam tampilan hasil penelusuran dan harus memuat dokumen turunan yang berada dalam folder tertentu jika pengguna memilih folder tersebut.
Catatan: Jika aplikasi Anda hanya memiliki izin untuk mengakses beberapa dokumen di jalurnya, nilai yang ditampilkan findDocumentPath()
hanya menyertakan folder dan dokumen yang dapat diakses oleh aplikasi Anda.
Memantau pemutaran audio
Layanan sistem AudioManager
mempertahankan daftar
objek AudioPlaybackConfiguration
aktif, yang masing-masing
berisi informasi tentang sesi pemutaran audio tertentu. Aplikasi Anda dapat
mengambil rangkaian konfigurasi yang aktif saat ini dengan memanggil
getActivePlaybackConfigurations()
.
Mulai dari Android 8.0 (API level 26), Anda dapat mendaftarkan callback yang memberi tahu
aplikasi saat satu atau beberapa
objek AudioPlaybackConfiguration
telah berubah. Untuk melakukannya,
panggil registerAudioPlaybackCallback()
, dengan meneruskan instance
AudioManager.AudioPlaybackCallback
. Class
AudioManager.AudioPlaybackCallback
berisi
metode onPlaybackConfigChanged()
, yang dipanggil oleh sistem saat konfigurasi
pemutaran audio berubah.
Konektivitas
Wi-Fi Aware
Android 8.0 (API level 26) menambahkan dukungan untuk Wi-Fi Aware, yang didasarkan pada spesifikasi Neighbor Awareness Networking (NAN). Pada perangkat dengan hardware Wi-Fi Aware yang sesuai, aplikasi dan perangkat di sekitar dapat menemukan dan berkomunikasi melalui Wi-Fi tanpa titik akses Internet. Kami bekerja sama dengan mitra perangkat keras kami untuk menghadirkan teknologi Wi-Fi Aware ke perangkat secepatnya. Untuk mengetahui informasi cara mengintegrasikan Wi-Fi Aware ke dalam aplikasi, lihat Wi-Fi Aware.
Bluetooth
Android 8.0 (API level 26) memperkaya dukungan Bluetooth platform dengan menambahkan fitur berikut:
- 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 (level API 26) menyediakan API yang memungkinkan Anda menyesuaikan dialog permintaan penyambungan saat mencoba menyambungkan dengan perangkat pendamping melalui Bluetooth, BLE, dan Wi-Fi. Untuk mengetahui informasi selengkapnya, lihat Penyambungan Perangkat Pendamping.
Untuk informasi selengkapnya tentang menggunakan Bluetooth di Android, lihat panduan Bluetooth. Untuk perubahan pada Bluetooth yang khusus untuk Android 8.0 (API level 26), lihat bagian Bluetooth di halaman Perubahan Perilaku Android 8.0.
Berbagi
Berbagi secara cerdas
Android 8.0 (level API 26) mempelajari preferensi berbagi yang dipersonalisasi dari pengguna dan lebih memahami setiap jenis konten yang merupakan aplikasi yang tepat untuk diajak berbagi. Misalnya, jika pengguna mengambil foto tanda terima, Android 8.0 dapat menyarankan aplikasi pemantau pengeluaran; jika pengguna mengambil foto selfie, aplikasi media sosial dapat menangani gambar tersebut dengan lebih baik. Android 8.0 otomatis mempelajari semua pola ini sesuai dengan preferensi yang dipersonalisasi oleh pengguna.
Berbagi cerdas berfungsi untuk jenis konten selain image
, seperti
audio
, video
, text
, URL
,
dll.
Untuk mengaktifkan Berbagi secara cerdas, tambahkan ArrayList
hingga tiga
anotasi string ke intent yang membagikan konten. 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 secara cerdas, lihat
EXTRA_CONTENT_ANNOTATIONS
.
Pengklasifikasi teks
Pada perangkat yang kompatibel, aplikasi dapat menggunakan Pengklasifikasi Teks baru untuk memeriksa apakah
string cocok dengan jenis entitas pengklasifikasi yang dikenal dan mendapatkan alternatif pemilihan
yang disarankan. Entitas yang dikenali oleh sistem mencakup alamat, URL,
nomor telepon, dan alamat email. Untuk mengetahui informasi selengkapnya, lihat
TextClassifier
.
Aksesibilitas
Android 8.0 (level API 26) mendukung beberapa fitur aksesibilitas baru bagi developer yang membuat layanan aksesibilitas mereka sendiri:
- Kategori volume baru untuk menyesuaikan volume aksesibilitas.
- Gestur sidik jari sebagai mekanisme input.
- Kemampuan text to speech multibahasa.
- Pintasan aksesibilitas berbasis hardware untuk mengakses layanan aksesibilitas pilihan dengan cepat.
- Dukungan untuk gestur lanjutan, atau urutan goresan terprogram.
- Tombol aksesibilitas untuk memanggil salah satu dari beberapa fitur aksesibilitas yang diaktifkan (hanya tersedia di perangkat yang menggunakan area navigasi yang dirender software).
- Nilai rentang satu sisi standar.
- Beberapa fitur untuk memproses teks dengan lebih mudah, termasuk teks petunjuk dan lokasi karakter teks di layar.
Keamanan & Privasi
Izin
Android 8.0 (API level 26) memperkenalkan beberapa izin baru terkait telepon:
- Izin
ANSWER_PHONE_CALLS
memungkinkan aplikasi Anda menjawab panggilan telepon masuk secara terprogram. Untuk menangani panggilan telepon masuk di aplikasi, Anda dapat menggunakan metodeacceptRingingCall()
. - Izin
READ_PHONE_NUMBERS
memberi aplikasi Anda akses baca ke nomor telepon yang tersimpan di sebuah perangkat.
Izin ini diklasifikasikan sebagai
berbahaya
dan merupakan bagian dari
grup izin
PHONE
.
Akses akun baru dan API penemuan
Android 8.0 (level API 26) memperkenalkan beberapa peningkatan pada cara aplikasi mendapatkan akses ke akun pengguna. Untuk akun yang mereka kelola, pengautentikasi dapat menggunakan kebijakannya sendiri untuk memutuskan apakah akan menyembunyikan akun dari, atau menampilkan akun ke, suatu aplikasi. Sistem Android melacak aplikasi yang dapat mengakses akun tertentu.
Pada versi Android sebelumnya, aplikasi yang ingin melacak daftar
akun pengguna harus mendapatkan update tentang semua akun, termasuk akun dengan
jenis yang tidak terkait. Android 8.0 menambahkan
metode addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
, yang memungkinkan aplikasi menentukan daftar jenis akun
yang perubahan akun harus diterima.
Perubahan API
AccountManager menyediakan enam metode baru untuk membantu pengautentikasi mengelola aplikasi yang dapat melihat akun:
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: Menetapkan tingkat visibilitas untuk akun pengguna dan kombinasi paket tertentu.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: Mendapatkan tingkat visibilitas untuk akun pengguna dan kombinasi paket tertentu. -
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 disimpan untuk akun tertentu. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: Memungkinkan pengautentikasi menginisialisasi nilai visibilitas akun. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: Menambahkan pemrosesOnAccountsUpdateListener
ke objekAccountManager
. Sistem memanggil pemroses ini setiap kali daftar akun di perangkat berubah.
Android 8.0 (API level 26) memperkenalkan dua nilai Nama Paket khusus untuk menentukan tingkat visibilitas
aplikasi yang tidak ditetapkan menggunakan
metode
setAccountVisibility(android.accounts.Account, java.lang.String, int)
. Nilai visibilitas
PACKAGE_NAME_KEY_LEGACY_VISIBLE
diterapkan ke aplikasi yang memiliki
izin
GET_ACCOUNTS
, dan menargetkan versi
Android yang lebih rendah dari Android 8.0, atau yang
tanda tangannya cocok dengan pengautentikasi yang menargetkan versi Android apa pun.
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
memberikan nilai visibilitas default untuk
aplikasi yang tidak 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) memberikan dukungan tambahan berikut untuk uji instrumentasi aplikasi Anda.
Jalankan pada proses aplikasi non-default
Sekarang Anda dapat menentukan bahwa uji instrumentasi tertentu harus dijalankan pada proses di luar proses default aplikasi. Konfigurasi ini berguna jika aplikasi Anda berisi beberapa aktivitas yang berjalan dalam proses yang berbeda.
Untuk menentukan instrumentasi proses non-default, buka file
manifes Anda, lalu ke elemen
<instrumentation>
yang diinginkan. Tambahkan
atribut android:targetProcess
, dan tetapkan nilainya ke salah satu
berikut ini:
- Nama proses tertentu.
- Daftar nama proses yang dipisah koma
- Karakter pengganti (
"*"
), yang memungkinkan instrumentasi untuk dijalankan pada proses yang diluncurkan dan mengeksekusi kode dalam paket yang ditentukan dalam atributandroid:targetPackage
.
Saat uji instrumentasi dijalankan, Anda dapat memeriksa proses mana
yang diuji dengan memanggil getProcessName()
.
Laporkan hasil selama pengujian
Kini Anda dapat melaporkan hasil saat uji instrumentasi sedang dijalankan,
bukan setelahnya, dengan memanggil addResults()
.
Intent rekaan untuk pengujian
Agar lebih mudah membuat pengujian UI independen yang terisolasi untuk aktivitas
aplikasi Anda, Android 8.0 (API level 26) memperkenalkan
metode onStartActivity()
. Anda mengganti metode ini dalam subclass kustom dari
class Instrumentation.ActivityMonitor
untuk menangani intent
tertentu yang dipanggil oleh class pengujian Anda.
Saat class pengujian Anda memanggil intent, metode tersebut akan menampilkan objek Instrumentation.ActivityResult
stub,
bukan mengeksekusi
intent itu sendiri. Dengan logika intent tiruan ini dalam pengujian, Anda dapat berfokus
pada cara aktivitas mempersiapkan dan menangani intent yang diteruskan ke
aktivitas yang berbeda atau ke aplikasi yang sama sekali berbeda.
Runtime & Alat
Optimalisasi platform
Android 8.0 (API level 26) menghadirkan runtime dan pengoptimalan lainnya ke platform yang menghasilkan sejumlah peningkatan performa. Pengoptimalan ini mencakup pembersihan sampah memori secara serentak, penggunaan memori yang lebih efisien, dan lokalitas kode.
Pengoptimalan ini menghasilkan waktu booting yang lebih cepat, serta performa yang lebih baik dalam 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 paket yang baru ditambahkan ini, lihat dokumentasi referensi API.
Jika ingin menggunakan fitur bahasa Java 8 di Android Studio, Anda harus mendownload versi pratinjau terbaru.
ICU4J Android Framework API yang diupdate
Android 8.0 (API level 26) memperluas
ICU4J Android Framework API—yang merupakan bagian dari ICU4J API—untuk digunakan
developer aplikasi dalam paket android.icu
. API ini menggunakan data pelokalan
yang ada di perangkat, sehingga Anda dapat mengurangi jejak APK dengan tidak mengompilasi
library ICU4J di APK.
Tabel 1. Versi ICU, CLDR, dan Unicode yang digunakan di Android.
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 enterprise baru telah diperkenalkan untuk perangkat yang menjalankan Android 8.0 (API level 26). Sorotannya mencakup:
- Profil kerja pada perangkat terkelola sepenuhnya memungkinkan perusahaan memisahkan pekerjaan dari data pribadi, sekaligus mengelola keduanya.
- Delegasi API memungkinkan pemilik perangkat dan pemilik profil untuk menetapkan pengelolaan aplikasi ke aplikasi lain.
- Peningkatan pengalaman pengguna dalam alur penyediaan (termasuk opsi penyesuaian baru) mengurangi waktu penyiapan.
- Kontrol baru atas Bluetooth, Wi-Fi, pencadangan, dan keamanan memungkinkan perusahaan mengelola lebih banyak perangkat. Logging aktivitas jaringan membantu perusahaan melacak masalah.
Untuk mempelajari hal ini serta fitur dan API enterprise Android baru lainnya lebih lanjut, lihat Android di Enterprise.