SlideShare uma empresa Scribd logo
ViewModel
Componente de
Arquitetura Android
thiengo.com.br
Arquitetura Android
Separação de conceitos
‣ Importante para qualquer
software;
‣ Simplifica o processo de testes;
‣ Facilita a evolução do software;
‣ Padrões de arquitetura foram
feitos para permitir a eficiente
separação de conceitos. Exemplos:
‣ MVC;
‣ MVP;
‣ MVVM.
Componentes de arquitetura Android
‣ APIs nativas que permitem a separação de conceitos com, ou
sem, um padrão de arquitetura sendo aplicado;
‣ Entidades adicionadas a partir da versão 26 do Android, Oreo;
‣ Na documentação oficial, Junto as APIs, foi divulgado também
um modelo de arquitetura que deve atender a maioria dos
domínios de problemas de aplicativos desta plataforma;
‣ As APIs de arquitetura vieram para acrescentar e não para
substituir os padrões de arquitetura já conhecidos.
Componentes de arquitetura Android
‣ Lifecycle:
‣ Para dar, às classes de domínio, a propriedade de ter conhecimento sobre o
ciclo de vida de algum componente importante sem necessidade de utilizar
os métodos de ciclo de vida deste componente.
‣ LiveData:
‣ Permite o uso simples do react, ou observer, no projeto, evitando o uso de
APIs terceiras e maior dependência entre as camadas da arquitetura em uso.
‣ ViewModel:
‣ Representante da camada de negócio, responsável por realizar as invocações
as camadas inferiores e entregar os dados corretos a camada superior, está
última: a camada de visualização, Activity ou Fragment.
‣ Room:
‣ Facilita o trabalho com a camada de modelo, persistência de dados via
SQLite, provendo uma interface mais simples.
Arquitetura recomendada
‣ Para a maioria dos
domínios de problemas
de aplicativos Android;
‣ Não deve prevalecer
sobre uma arquitetura
eficiente já em uso;
‣ As classes de domínio
que precisão ter seus
dados refletidos na
camada de visualização,
estão vinculadas ao
LiveData.
ViewModel API
Características gerais
‣ Principal entidade da camada de lógica
de negócio da arquitetura recomendada;
‣ Objetos ViewModel funcionam
vinculados a algum escopo: Activity ou
Fragment;
‣ Objetos ViewModel mantém os dados
em memória enquanto, por exemplo, há
uma reconstrução da entidade vinculada;
‣ Em relação as APIs concorrentes: o
ViewModel é mais simples e fácil de,
respectivamente, vincular e utilizar.
Referência Gradle App Level
‣ Pacote android.arch;
‣ Na documentação não há definição de API mínima para uso, logo, podemos assumir a API
10,Android Gingerbread, ainda em mercado, sendo a mínima;
‣ Utilize a referência 'android.arch.lifecycle:runtime' somente se a API de suporte em uso
for menor do que a versão 26.1;
‣ Referenciando somente o ViewModel no build.gradle (Module: app):
'android.arch.lifecycle:extensions'.
Codificação
‣ Apesar de não estar explícito na
documentação, nas classes
ViewModel têm de haver um
construtor vazio, sem parâmetros;
‣ ViewModelProviders é a classe
utilitária que provê o ViewModel
solicitado. O ViewModel é criado
caso já não esteja em memória;
‣ of() pode receber um objeto
Activity ou um Fragment;
‣ Objetos ViewModel nunca devem
ter referência a algum objeto da
camada de visualização (Activity e
Fragment, por exemplo), isso para
evitar vazamento de memória.
Ciclo de vida
‣ Possibilidade de vinculo somente ao
escopo de Activity ou Fragment;
‣ O objeto ViewModel somente é
removido da memória quando o
componente vinculado é destruído
permanentemente;
‣ A remoção total do ViewModel
somente ocorre quando a entidade
vinculada passa pelo onDestroy() /
onDetach() e o sistema sabe que
não foi uma reconstrução e sim uma
finalização definitiva. Caso contrário o
novo objeto, Activity ou Fragment,
têm o ViewModel vinculado a ele.
Escopo de um objeto ViewModel vinculado a uma atividade
Comunicação entre fragmentos
‣ Outra característica de destaque
da API, sendo uma melhor
escolha, para comunicação, ante a:
‣ Bundle;
‣ EventBus;
‣ LocalBroadcastManager.
‣ Fragmentos não sabem da
existência um do outro;
‣ O escopo da atividade é que
deve ser utilizado para permitir a
comunicação.
vs SavedInstanceState
ViewModel SavedInstanceState
Durabilidade dos dados
em memória
Menor Maior
Quantidade de dados
(bytes) em memória
Maior Menor
Auxílio de Interface para
serialização e
desserialização de objetos
Não Sim
‣ Não há uma melhor do que a outra, há o contexto certo para cada
API.
Com as novas APIs de componentes de arquitetura o desenvolvimento de
aplicativos Android mais robustos, ao menos na estrutura, tende a se tornar
algo comum.
Sem receios é possível dizer que a luta entre quais APIs, externas, MVP ou MVVM
utilizar tende a diminuir, pois agora temos APIs nativas que podem trabalhar junto a
aplicação de qualquer padrão de arquitetura.
O ViewModel é robusto mesmo quando não tendo algum LiveData sendo
utilizado. Logo, vale o estudo se realmente é viável manter o Parcelable e cia.
quando somente um ViewModel poderia reter, pelo ciclo necessário, os dados em
memória.
Sempre assegure-se de não referenciar no ViewModel alguma entidade de origem
na camada de visualização, pois está API será retida em memória em alguns
momentos onde uma atividade, ou fragmento, não será, e precisará ser removida
para a construção uma nova atividade, ou fragmento.
Conclusão
Fontes
Conteúdo completo, em texto e em vídeo, no link a seguir:
‣ https://www.thiengo.com.br/viewmodel-android-como-utilizar-este-componente-de-arquitetura
Fontes:
‣ https://developer.android.com/topic/libraries/architecture/guide.html
‣ https://developer.android.com/topic/libraries/architecture/adding-components.html
‣ https://developer.android.com/topic/libraries/architecture/lifecycle.html
‣ https://developer.android.com/topic/libraries/architecture/livedata.html
‣ https://developer.android.com/reference/android/arch/lifecycle/ViewModel.html
‣ https://developer.android.com/topic/libraries/architecture/viewmodel.html
ViewModel
Componente de
Arquitetura Android
thiengo.com.br
Vinícius Thiengo
thiengocalopsita@gmail.com

Mais conteúdo relacionado

PDF
Trabalhando Análise Qualitativa em seu Aplicativo Android
PDF
Chips Android, Quando e Como Utilizar
PDF
Data Binding Para Vinculo de Dados na UI Android
PDF
Android: Avaliação do Pré-projeto Agenda Cultural
PDF
Observable Binding Para Atualização na UI Android
PDF
Como Utilizar Métodos Binding Adapter no Android
PDF
Leitor de Códigos no Android com Barcode Scanner API - ZXing
PDF
BottomNavigationView Android, Como e Quando Utilizar
Trabalhando Análise Qualitativa em seu Aplicativo Android
Chips Android, Quando e Como Utilizar
Data Binding Para Vinculo de Dados na UI Android
Android: Avaliação do Pré-projeto Agenda Cultural
Observable Binding Para Atualização na UI Android
Como Utilizar Métodos Binding Adapter no Android
Leitor de Códigos no Android com Barcode Scanner API - ZXing
BottomNavigationView Android, Como e Quando Utilizar

Mais procurados (20)

PDF
Estudando Android - Lista de Conteúdos do Blog
PDF
Android About Page API Para Construir a Tela Sobre
PDF
SelectionTracker Para Seleção de Itens no RecyclerView Android
PDF
Ajuste de Texto com Autosizing TextView - Android Jetpack
PDF
Live Templates Para Otimização de Tempo no Android Studio
PDF
Como Reter Objetos Utilizando Android-State API
PDF
Lottie API Para Animações no Android
PDF
PhotoView Android Para a Completa Implementação de Zoom
PDF
Como Impulsionar o App Android - Compartilhamento Nativo
PDF
Android Studio
PDF
Estudando Android - Lista de Conteúdos do Blog
PDF
True Time API Para Data e Horário NTP no Android
PDF
Annotation Span Para Estilização de Texto no Android
PDF
Fontes em XML, Android O. Configuração e Uso
PDF
Introdução ao Github actions - TDC Connections
PDF
Tutorial - Como criar sua primeira app para Android
PPT
Design Patterns
PPTX
Programação Android - Básico
PPT
Da introdução à prática no desenvolvimento Android
PDF
Android Aula 5
Estudando Android - Lista de Conteúdos do Blog
Android About Page API Para Construir a Tela Sobre
SelectionTracker Para Seleção de Itens no RecyclerView Android
Ajuste de Texto com Autosizing TextView - Android Jetpack
Live Templates Para Otimização de Tempo no Android Studio
Como Reter Objetos Utilizando Android-State API
Lottie API Para Animações no Android
PhotoView Android Para a Completa Implementação de Zoom
Como Impulsionar o App Android - Compartilhamento Nativo
Android Studio
Estudando Android - Lista de Conteúdos do Blog
True Time API Para Data e Horário NTP no Android
Annotation Span Para Estilização de Texto no Android
Fontes em XML, Android O. Configuração e Uso
Introdução ao Github actions - TDC Connections
Tutorial - Como criar sua primeira app para Android
Design Patterns
Programação Android - Básico
Da introdução à prática no desenvolvimento Android
Android Aula 5
Anúncio

Semelhante a ViewModel Android, Como Utilizar Este Componente de Arquitetura (11)

PPTX
Apresentacão Android Components - Programando em camadas
PDF
Android Dev Conference 2017 - Arquitetura para projetos Android
PDF
Desenvolvimento Moderno de aplicativos Android
PPTX
Historia do mvc, mvp e mvvm no android
PDF
Aula 1 view model livedata e databinding.pptx
PDF
Arquitetura para aplicações Android. Do MVP ao MVVM.
PDF
Desenvolvimento Moderno de Aplicativos Android
PDF
MVC MVP MVVM para Web
PDF
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
PPTX
Entendento Arquitetura MVI + Flow
PDF
Arquitetura no Android, realmente importa? - TDC 2011
Apresentacão Android Components - Programando em camadas
Android Dev Conference 2017 - Arquitetura para projetos Android
Desenvolvimento Moderno de aplicativos Android
Historia do mvc, mvp e mvvm no android
Aula 1 view model livedata e databinding.pptx
Arquitetura para aplicações Android. Do MVP ao MVVM.
Desenvolvimento Moderno de Aplicativos Android
MVC MVP MVVM para Web
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Entendento Arquitetura MVI + Flow
Arquitetura no Android, realmente importa? - TDC 2011
Anúncio

Mais de Vinícius Thiengo (7)

PDF
Android: Qual Tecnologia de Desenvolvimento Utilizar?
PDF
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
PDF
5 livros que não são de TI, mas que um desenvolvedor deveria ler
PDF
Utilizando Intenções Para Mapas de Alta Qualidade no Android
PDF
Freelancer Android
PDF
Definindo Fontes em Aplicativos Android
PDF
Material Design
Android: Qual Tecnologia de Desenvolvimento Utilizar?
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
5 livros que não são de TI, mas que um desenvolvedor deveria ler
Utilizando Intenções Para Mapas de Alta Qualidade no Android
Freelancer Android
Definindo Fontes em Aplicativos Android
Material Design

Último (20)

PDF
1 - Aula Pneumática Elementos da Pneumática.pdf
PDF
Aula sobre Materiais de construção - Construções rurais.ppt
PPTX
Portfólio Dexo Recursos Humanos docosia
PDF
Projecto Fotovoltaico de um sistema de abastecimento de agua
PPTX
Apresentação PF MACAVE no curso de mestrado em Ciencias florestais
PPTX
Portuguese_Portfolio_May_2024.pptx_redes
PPTX
Func-equip-moagem-espe-prensa_PPT_003.pptx
PDF
Boas práticas em rebobinamento trifásico .pdf
PDF
Aula 2 Normas Regulamentadoras (PARTE I).pdf
PPT
Ergonomia Aula 01 conceitos básicos segurança
PPT
Diagrama de fases de los aceros como material
PPTX
Aula_Osciloscópio_Exercícios_Simulações_
PPTX
PROCEDIMENTOS DE BLOQUEIO- Executante.pptx
PDF
Material referente ao método kanban f2ms
PPTX
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
PPT
Aula_2_Atomo distribuiçao eletronica.ppt
PPT
1 - Introdução a disciplina ciencia o solo.ppt
PPTX
Aula 04 - Fisica teorica e experimental.pptx
PPTX
Aula 6_Delineamento em Blocos Casualizados_28.09.2020_Mestrado.pptx
PPTX
Aula_Semicondutortes_Diodos e LEDs_apresentação
1 - Aula Pneumática Elementos da Pneumática.pdf
Aula sobre Materiais de construção - Construções rurais.ppt
Portfólio Dexo Recursos Humanos docosia
Projecto Fotovoltaico de um sistema de abastecimento de agua
Apresentação PF MACAVE no curso de mestrado em Ciencias florestais
Portuguese_Portfolio_May_2024.pptx_redes
Func-equip-moagem-espe-prensa_PPT_003.pptx
Boas práticas em rebobinamento trifásico .pdf
Aula 2 Normas Regulamentadoras (PARTE I).pdf
Ergonomia Aula 01 conceitos básicos segurança
Diagrama de fases de los aceros como material
Aula_Osciloscópio_Exercícios_Simulações_
PROCEDIMENTOS DE BLOQUEIO- Executante.pptx
Material referente ao método kanban f2ms
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
Aula_2_Atomo distribuiçao eletronica.ppt
1 - Introdução a disciplina ciencia o solo.ppt
Aula 04 - Fisica teorica e experimental.pptx
Aula 6_Delineamento em Blocos Casualizados_28.09.2020_Mestrado.pptx
Aula_Semicondutortes_Diodos e LEDs_apresentação

ViewModel Android, Como Utilizar Este Componente de Arquitetura

  • 3. Separação de conceitos ‣ Importante para qualquer software; ‣ Simplifica o processo de testes; ‣ Facilita a evolução do software; ‣ Padrões de arquitetura foram feitos para permitir a eficiente separação de conceitos. Exemplos: ‣ MVC; ‣ MVP; ‣ MVVM.
  • 4. Componentes de arquitetura Android ‣ APIs nativas que permitem a separação de conceitos com, ou sem, um padrão de arquitetura sendo aplicado; ‣ Entidades adicionadas a partir da versão 26 do Android, Oreo; ‣ Na documentação oficial, Junto as APIs, foi divulgado também um modelo de arquitetura que deve atender a maioria dos domínios de problemas de aplicativos desta plataforma; ‣ As APIs de arquitetura vieram para acrescentar e não para substituir os padrões de arquitetura já conhecidos.
  • 5. Componentes de arquitetura Android ‣ Lifecycle: ‣ Para dar, às classes de domínio, a propriedade de ter conhecimento sobre o ciclo de vida de algum componente importante sem necessidade de utilizar os métodos de ciclo de vida deste componente. ‣ LiveData: ‣ Permite o uso simples do react, ou observer, no projeto, evitando o uso de APIs terceiras e maior dependência entre as camadas da arquitetura em uso. ‣ ViewModel: ‣ Representante da camada de negócio, responsável por realizar as invocações as camadas inferiores e entregar os dados corretos a camada superior, está última: a camada de visualização, Activity ou Fragment. ‣ Room: ‣ Facilita o trabalho com a camada de modelo, persistência de dados via SQLite, provendo uma interface mais simples.
  • 6. Arquitetura recomendada ‣ Para a maioria dos domínios de problemas de aplicativos Android; ‣ Não deve prevalecer sobre uma arquitetura eficiente já em uso; ‣ As classes de domínio que precisão ter seus dados refletidos na camada de visualização, estão vinculadas ao LiveData.
  • 8. Características gerais ‣ Principal entidade da camada de lógica de negócio da arquitetura recomendada; ‣ Objetos ViewModel funcionam vinculados a algum escopo: Activity ou Fragment; ‣ Objetos ViewModel mantém os dados em memória enquanto, por exemplo, há uma reconstrução da entidade vinculada; ‣ Em relação as APIs concorrentes: o ViewModel é mais simples e fácil de, respectivamente, vincular e utilizar.
  • 9. Referência Gradle App Level ‣ Pacote android.arch; ‣ Na documentação não há definição de API mínima para uso, logo, podemos assumir a API 10,Android Gingerbread, ainda em mercado, sendo a mínima; ‣ Utilize a referência 'android.arch.lifecycle:runtime' somente se a API de suporte em uso for menor do que a versão 26.1; ‣ Referenciando somente o ViewModel no build.gradle (Module: app): 'android.arch.lifecycle:extensions'.
  • 10. Codificação ‣ Apesar de não estar explícito na documentação, nas classes ViewModel têm de haver um construtor vazio, sem parâmetros; ‣ ViewModelProviders é a classe utilitária que provê o ViewModel solicitado. O ViewModel é criado caso já não esteja em memória; ‣ of() pode receber um objeto Activity ou um Fragment; ‣ Objetos ViewModel nunca devem ter referência a algum objeto da camada de visualização (Activity e Fragment, por exemplo), isso para evitar vazamento de memória.
  • 11. Ciclo de vida ‣ Possibilidade de vinculo somente ao escopo de Activity ou Fragment; ‣ O objeto ViewModel somente é removido da memória quando o componente vinculado é destruído permanentemente; ‣ A remoção total do ViewModel somente ocorre quando a entidade vinculada passa pelo onDestroy() / onDetach() e o sistema sabe que não foi uma reconstrução e sim uma finalização definitiva. Caso contrário o novo objeto, Activity ou Fragment, têm o ViewModel vinculado a ele. Escopo de um objeto ViewModel vinculado a uma atividade
  • 12. Comunicação entre fragmentos ‣ Outra característica de destaque da API, sendo uma melhor escolha, para comunicação, ante a: ‣ Bundle; ‣ EventBus; ‣ LocalBroadcastManager. ‣ Fragmentos não sabem da existência um do outro; ‣ O escopo da atividade é que deve ser utilizado para permitir a comunicação.
  • 13. vs SavedInstanceState ViewModel SavedInstanceState Durabilidade dos dados em memória Menor Maior Quantidade de dados (bytes) em memória Maior Menor Auxílio de Interface para serialização e desserialização de objetos Não Sim ‣ Não há uma melhor do que a outra, há o contexto certo para cada API.
  • 14. Com as novas APIs de componentes de arquitetura o desenvolvimento de aplicativos Android mais robustos, ao menos na estrutura, tende a se tornar algo comum. Sem receios é possível dizer que a luta entre quais APIs, externas, MVP ou MVVM utilizar tende a diminuir, pois agora temos APIs nativas que podem trabalhar junto a aplicação de qualquer padrão de arquitetura. O ViewModel é robusto mesmo quando não tendo algum LiveData sendo utilizado. Logo, vale o estudo se realmente é viável manter o Parcelable e cia. quando somente um ViewModel poderia reter, pelo ciclo necessário, os dados em memória. Sempre assegure-se de não referenciar no ViewModel alguma entidade de origem na camada de visualização, pois está API será retida em memória em alguns momentos onde uma atividade, ou fragmento, não será, e precisará ser removida para a construção uma nova atividade, ou fragmento. Conclusão
  • 15. Fontes Conteúdo completo, em texto e em vídeo, no link a seguir: ‣ https://www.thiengo.com.br/viewmodel-android-como-utilizar-este-componente-de-arquitetura Fontes: ‣ https://developer.android.com/topic/libraries/architecture/guide.html ‣ https://developer.android.com/topic/libraries/architecture/adding-components.html ‣ https://developer.android.com/topic/libraries/architecture/lifecycle.html ‣ https://developer.android.com/topic/libraries/architecture/livedata.html ‣ https://developer.android.com/reference/android/arch/lifecycle/ViewModel.html ‣ https://developer.android.com/topic/libraries/architecture/viewmodel.html