Como o novo ViewBinding se compara às extensões Kotlin Android com ligações de vistas sintéticas?
Além dos NullSafety e TypeSafety fornecidos pelos novos ViewBindings, por que deveríamos considerar abandonar a maneira Kotlin de usar ligações sintéticas no Views?
O novo ViewBinding tem mais desempenho, pois gera a classe Binding antes da mão?
Respostas:
Vamos revisar os dois.
Configuração
Extensões Android do Kotlin
import kotlinx.android.synthetic.main.<layout>.*
textView.text = "Hello, world!"
. Estas extensões trabalhar em:Activities
,Fragments
eViews
.Ver Encadernação
private lateinit var binding YourClassBinding
binding = YourClassBinding.inflate(layoutInflater)
dentroActivity
doonCreate
e chamadasetContentView(binding.root)
, ou inflá-lo emFragment
'sonCreateView
, em seguida, devolvê-lo:return binding.root
binding.textView.text = "Hello, world!"
Digite segurança
As extensões Kotlin Android e ViewBinding são do tipo seguro por definição, porque as visualizações referenciadas já estão convertidas nos tipos apropriados.
Segurança nula
As extensões Kotlin Android e ViewBinding são seguras para nulos. ViewBinding não tem nenhuma vantagem aqui . No caso de KAE , se a visualização estiver presente apenas em algumas configurações de layout, o IDE indicará isso para você:
Então você o trata como qualquer outro tipo anulável no Kotlin, e o erro desaparece:
Aplicando alterações de layout
No caso das extensões Kotlin Android , as alterações de layout são instantaneamente convertidas em geração de extensões sintéticas, para que você possa usá-las imediatamente. No caso de ViewBinding , você deve criar seu projeto
Uso incorreto do layout
No caso das extensões Kotlin Android , é possível importar extensões sintéticas de layout incorretas, causando isso
NullPointerException
. O mesmo se aplica ao ViewBinding , pois podemos importar aBinding
classe errada . Embora seja mais provável ignorar a importação incorreta do que o nome incorreto da classe, especialmente se o arquivo de layout tiver o nome deActivity
/Fragment
/View
, então o ViewBinding está em vantagem aqui.Resumo de KAE vs ViewBinding
Eu acho que há um grande equívoco sobre o ViewBinding substituir o KAE . As pessoas ouvem grandes palavras-chave e as repetem sem verificar previamente. Certamente, o ViewBinding é a melhor opção para o desenvolvimento de Java agora (substituto do ButterKnife ), mas não há pouca ou nenhuma vantagem sobre o KAE no Kotlin (consulte a seção Uso incorreto do layout ).
Nota lateral: Tenho certeza que as pessoas do DataBinding vão gostar do ViewBinding :)
fonte
DataBinding
? Eu acho que é um recurso essencial parar de usar as referências de exibição. A propósito, você pode "lançar" seu modelo de visualização através de<include ... />
tags, o que é outra grande vantagem.ViewBinding
resolveu o maior problema dekotlinx.android.synthetic
. Nasynthetic
associação, se você definir sua exibição de conteúdo como um layout e digitar um ID que exista apenas em um layout diferente, o IDE permitirá que você complete automaticamente e adicione a nova instrução de importação. A menos que o desenvolvedor verifique especificamente se as instruções de importação importam apenas as visualizações corretas, não há uma maneira segura de verificar se isso não causará um problema de tempo de execução. MasViewBinding
você deve usar seulayout
objeto de ligação para acessar suas visualizações, para nunca invocar uma visualização em um layout diferente e, se quiser fazer isso, receberá um erro de compilação e não um erro de tempo de execução. Aqui está um exemplo.Criamos dois layouts chamados
activity_main
eactivity_other
assim:Agora, se você escrever sua atividade assim:
seu código será compilado sem nenhum erro, mas seu aplicativo falhará em tempo de execução. Porque a visualização com
message_other
id não existeactivity_main
e o compilador não verificou isso. Mas se você usarViewBinding
assim:seu código nunca será compilado e
Android Studio
mostra um erro na última linha.fonte
O kotlinx.android.synthetic não é mais uma prática recomendada, disse o google em uma mensagem de confirmação "one of Reddit thread
https://android-review.googlesource.com/c/platform/frameworks/support/+/882241 "
O Synthetics não é desenvolvido pelo google, é parte da extensão android do kotlin, criada por JetBrains e, gradualmente, os desenvolvedores do google android começaram a substituir o Synthetics pelo ViewBindins em suas demos e códigos-fonte.
"Agora vem a pergunta, qual devemos levar em consideração."
Segundo o google (View binding, ButterKnife, Kotlin synthetics), essas bibliotecas são usadas com sucesso por muitos aplicativos e resolvem o mesmo problema.
No entanto, para a maioria dos aplicativos, o Google recomenda experimentar a vinculação de exibição em vez dessas bibliotecas .
Imagem de referência anexada para limpar as coisas rapidamente.
No entanto, se você quiser entrar no departamento, pode seguir o link abaixo. https://medium.com/androiddevelopers/use-view-binding-to-replace-findviewbyid-c83942471fc
fonte
or after view lifecycle ends
parte?apply plugin: 'kotlin-android-extensions'
vsviewBinding { enabled = true }
. Pouca diferença.