Bagaimana perbandingan ViewBinding baru dengan Kotlin Android Extensions dengan binding tampilan sintetis?
Selain membentuk NullSafety dan TypeSafety yang disediakan oleh ViewBindings baru, mengapa kita harus mempertimbangkan cara Kotlin menggunakan binding sintetik pada Views.
Apakah ViewBinding baru lebih berkinerja karena menghasilkan kelas Binding sebelumnya?
Jawaban:
Mari kita tinjau keduanya.
Konfigurasi
Ekstensi Android Kotlin
import kotlinx.android.synthetic.main.<layout>.*
textView.text = "Hello, world!"
. Ekstensi ini bekerja pada:Activities
,Fragments
danViews
.Lihat Binding
private lateinit var binding YourClassBinding
binding = YourClassBinding.inflate(layoutInflater)
dalamActivity
'sonCreate
dan panggilansetContentView(binding.root)
, atau mengembang diFragment
' sonCreateView
kemudian kembali:return binding.root
binding.textView.text = "Hello, world!"
Ketik keamanan
Kotlin Android Extensions dan ViewBinding adalah tipe aman menurut definisi, karena pandangan yang direferensikan telah dicasting ke tipe yang sesuai.
Keamanan kosong
Kotlin Android Extensions dan ViewBinding keduanya aman nol. ViewBinding tidak memiliki keunggulan di sini . Dalam kasus KAE , jika tampilan hanya ada di beberapa konfigurasi tata letak, IDE akan menunjukkannya untuk Anda:
Jadi Anda memperlakukannya sebagai jenis nullable lainnya di Kotlin, dan kesalahannya akan hilang:
Menerapkan perubahan tata letak
Dalam kasus Kotlin Android Extensions , perubahan tata letak langsung diterjemahkan ke generasi ekstensi sintetis, sehingga Anda dapat menggunakannya segera. Dalam hal ViewBinding , Anda harus membangun proyek Anda
Penggunaan tata letak salah
Dalam kasus Kotlin Android Extensions , dimungkinkan untuk mengimpor ekstensi sintetis tata letak yang salah, sehingga menyebabkan
NullPointerException
. Hal yang sama berlaku untuk ViewBinding , karena kita dapat mengimporBinding
kelas yang salah . Meskipun, lebih mungkin untuk mengabaikan impor yang salah daripada nama kelas yang salah, terutama jika file tata letak dinamaiActivity
/Fragment
/View
, jadi ViewBinding lebih unggul di sini.Ringkasan KAE vs ViewBinding
Saya pikir ada kesalahpahaman besar tentang ViewBinding menjadi pengganti KAE . Orang-orang mendengar kata kunci besar dan mengulanginya tanpa memverifikasi terlebih dahulu. Tentu, ViewBinding adalah pilihan terbaik untuk pengembangan Java saat ini (pengganti ButterKnife ), tetapi tidak ada atau sedikit keuntungan dibandingkan KAE di Kotlin (lihat bagian Penggunaan tata letak yang salah ).
Catatan: Saya yakin orang-orang DataBinding akan menyukai ViewBinding :)
sumber
DataBinding
? Saya pikir ini fitur yang sangat penting untuk berhenti menggunakan referensi tampilan sama sekali. Omong-omong, Anda dapat "melempar" model tampilan Anda melalui<include ... />
tag, yang merupakan keuntungan besar lainnya.ViewBinding
memecahkan masalah terbesarkotlinx.android.synthetic
. Dalamsynthetic
penjilidan jika Anda mengatur tampilan konten Anda ke tata letak, lalu ketik id yang hanya ada di tata letak yang berbeda, IDE memungkinkan Anda melengkapi otomatis dan menambahkan pernyataan impor baru. Kecuali pengembang secara khusus memeriksa untuk memastikan pernyataan impor mereka hanya mengimpor tampilan yang benar, tidak ada cara aman untuk memverifikasi bahwa ini tidak akan menyebabkan masalah runtime. Tetapi di dalamViewBinding
Anda harus menggunakanlayout
objek mengikat Anda untuk mengakses pandangannya sehingga Anda tidak pernah meminta tampilan dalam tata letak yang berbeda dan jika Anda ingin melakukan ini Anda akan mendapatkan kesalahan kompilasi bukan kesalahan runtime. Berikut ini sebuah contoh.Kami membuat dua tata letak yang disebut
activity_main
danactivity_other
seperti itu:Sekarang jika Anda menulis aktivitas Anda seperti ini:
kode Anda akan dikompilasi tanpa kesalahan tetapi aplikasi Anda akan macet saat runtime. Karena tampilan dengan
message_other
id tidak ada di dalamactivity_main
dan kompiler tidak memeriksa ini. Tetapi jika Anda menggunakanViewBinding
seperti:kode Anda tidak akan pernah dikompilasi dan
Android Studio
menunjukkan kesalahan pada baris terakhir.sumber
kotlinx.android.synthetic tidak lagi direkomendasikan, kata google dalam satu pesan komit "salah satu utas Reddit
https://android-review.googlesource.com/c/platform/frameworks/support/+/882241 "
Sintetis tidak dikembangkan oleh google, ini adalah bagian dari ekstensi android kotlin yang dibuat oleh JetBrains dan secara bertahap google android developer mulai mengganti Synthetics dengan ViewBindins dalam demo dan kode sumber mereka.
"Sekarang pertanyaan datang, yang mana yang harus kita pertimbangkan."
Menurut google (View binding, ButterKnife, Kotlin synthetics) perpustakaan ini berhasil digunakan oleh banyak aplikasi dan menyelesaikan masalah yang sama.
Tetapi untuk sebagian besar aplikasi, Google merekomendasikan untuk mencoba pengikatan tampilan alih-alih pustaka ini karena pengikatan tampilan memberikan tampilan yang lebih aman, lebih ringkas.
Gambar referensi terlampir untuk menghapus hal-hal dengan cepat.
Namun jika Anda ingin masuk ke dept, Anda dapat mengikuti tautan di bawah ini. https://medium.com/androiddevelopers/use-view-binding-to-replace-findviewbyid-c83942471fc
sumber
or after view lifecycle ends
bagian?apply plugin: 'kotlin-android-extensions'
vsviewBinding { enabled = true }
. Tidak banyak perbedaan.