Wie vergleicht sich die neue ViewBinding mit den Kotlin Android Extensions mit synthetischen Ansichtsbindungen?
Abgesehen von NullSafety und TypeSafety, die von neuen ViewBindings bereitgestellt werden, warum sollten wir in Betracht ziehen, die Kotlin-Methode zur Verwendung synthetischer Bindungen in Views aufzugeben.
Ist das neue ViewBinding leistungsfähiger, da es die Binding-Klasse zuvor generiert?
Antworten:
Lassen Sie uns die beiden überprüfen.
Aufbau
Kotlin Android-Erweiterungen
import kotlinx.android.synthetic.main.<layout>.*
textView.text = "Hello, world!"
. Diese Erweiterungen arbeiten:Activities
,Fragments
undViews
.Bindung anzeigen
private lateinit var binding YourClassBinding
binding = YourClassBinding.inflate(layoutInflater)
inActivity
und aufonCreate
und rufen SiesetContentView(binding.root)
sie aufFragment
,onCreateView
und geben Sie sie dann zurück:return binding.root
binding.textView.text = "Hello, world!"
Typensicherheit
Kotlin Android Extensions und ViewBinding sind per Definition typsicher, da referenzierte Ansichten bereits in geeignete Typen umgewandelt wurden.
Null Sicherheit
Kotlin Android Extensions und ViewBinding sind beide null sicher. ViewBinding hat hier keinen Vorteil . Wenn bei KAE die Ansicht nur in einigen Layoutkonfigurationen vorhanden ist, weist IDE Sie darauf hin:
Sie behandeln es also einfach wie jeden anderen nullbaren Typ in Kotlin, und der Fehler verschwindet:
Layoutänderungen anwenden
Bei Kotlin-Android-Erweiterungen führen Layoutänderungen sofort zur Generierung synthetischer Erweiterungen, sodass Sie sie sofort verwenden können. Bei ViewBinding müssen Sie Ihr Projekt erstellen
Falsche Layoutverwendung
Im Fall von Kotlin Android-Erweiterungen ist es möglich, synthetische Erweiterungen mit falschem Layout zu importieren, was zu Ursachen führt
NullPointerException
. Gleiches gilt für ViewBinding , da wir falscheBinding
Klassen importieren können . Obwohl es wahrscheinlicher ist, einen falschen Import als einen falschen Klassennamen zu übersehen, insbesondere wenn die Layoutdatei gut nachActivity
/Fragment
/ benannt istView
, hat ViewBinding hier die Oberhand.Zusammenfassung von KAE vs ViewBinding
Ich denke , es ist ein großes Missverständnis über ViewBinding Sein Ersatz für KAE . Die Leute hören große Schlüsselwörter und wiederholen sie, ohne sie vorher zu überprüfen. Sicher, ViewBinding ist derzeit die beste Option für die Java-Entwicklung (Ersatz für ButterKnife ), aber es gibt keinen oder nur einen geringen Vorteil gegenüber KAE in Kotlin (siehe Abschnitt " Falsche Layoutverwendung ").
Randnotiz: Ich bin sicher, dass DataBinding-Leute ViewBinding mögen werden :)
quelle
DataBinding
? Ich denke, es ist eine wesentliche Funktion, die Verwendung von Ansichtsreferenzen überhaupt zu beenden. Übrigens können Sie Ihr Ansichtsmodell durch<include ... />
Tags "werfen" , was ein weiterer großer Vorteil ist.ViewBinding
löste das größte Problem vonkotlinx.android.synthetic
. Insynthetic
Wenn Sie Ihre Inhalte im Hinblick auf eine Layout - Bindung, dann eine ID eingeben , die nur in einem anderen Layout vorhanden ist , können die IDE Sie automatisch vervollständigt und die neue Import - Anweisung hinzuzufügen. Sofern der Entwickler nicht ausdrücklich überprüft, ob seine Importanweisungen nur die richtigen Ansichten importieren, gibt es keine sichere Möglichkeit, um sicherzustellen, dass dies kein Laufzeitproblem verursacht. Aber inViewBinding
Sie verwenden sollenlayout
verbindlich Objekt seine Ansichten zugreifen , so dass Sie nie invoke zu einer Ansicht in einem anderen Layout und wenn Sie dies tun wollen , müssen Sie einen Compiler - Fehler nicht einen Laufzeitfehler erhalten. Hier ist ein Beispiel.Wir erstellen zwei Layouts mit dem Namen
activity_main
undactivity_other
wie folgt:Wenn Sie Ihre Aktivität nun so schreiben:
Ihr Code wird fehlerfrei kompiliert, aber Ihre Anwendung stürzt zur Laufzeit ab. Weil die Ansicht mit der
message_other
ID in nicht vorhanden istactivity_main
und der Compiler dies nicht überprüft hat. Aber wenn SieViewBinding
so verwenden:Ihr Code wird niemals kompiliert und
Android Studio
zeigt Ihnen einen Fehler in der letzten Zeile.quelle
kotlinx.android.synthetic ist keine empfohlene Vorgehensweise mehr, sagte Google in einer Commit-Nachricht "einer von Reddit-Threads
https://android-review.googlesource.com/c/platform/frameworks/support/+/882241 "
Synthetics wird nicht von Google entwickelt, sondern ist Teil der von JetBrains entwickelten Kotlin-Android-Erweiterung. Nach und nach ersetzten Google-Android-Entwickler die Synthetics in ihren Demos und Quellcodes durch die ViewBindins.
"Jetzt kommt die Frage, welche wir berücksichtigen müssen."
Laut Google (View Binding, ButterKnife, Kotlin Synthetics) werden diese Bibliotheken von vielen Apps erfolgreich verwendet und lösen das gleiche Problem.
Für die meisten Apps empfiehlt Google jedoch, die Ansichtsbindung anstelle dieser Bibliotheken auszuprobieren, da die Ansichtsbindung eine sicherere und präzisere Ansichtssuche bietet.
Angehängtes Referenzbild, um Dinge schnell zu löschen.
Wenn Sie jedoch in die Abteilung gehen möchten, können Sie dem unten angegebenen Link folgen. https://medium.com/androiddevelopers/use-view-binding-to-replace-findviewbyid-c83942471fc
quelle
or after view lifecycle ends
Teil übersprungen ?apply plugin: 'kotlin-android-extensions'
vsviewBinding { enabled = true }
. Kein großer Unterschied.