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

Mais procurados

Estudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogEstudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do Blog
Vinícius Thiengo
 
Android About Page API Para Construir a Tela Sobre
Android About Page API Para Construir a Tela SobreAndroid About Page API Para Construir a Tela Sobre
Android About Page API Para Construir a Tela Sobre
Vinícius Thiengo
 
SelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidSelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView Android
Vinícius Thiengo
 
Ajuste de Texto com Autosizing TextView - Android Jetpack
Ajuste de Texto com Autosizing TextView - Android JetpackAjuste de Texto com Autosizing TextView - Android Jetpack
Ajuste de Texto com Autosizing TextView - Android Jetpack
Vinícius Thiengo
 
Live Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android StudioLive Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android Studio
Vinícius Thiengo
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State API
Vinícius Thiengo
 
Lottie API Para Animações no Android
Lottie API Para Animações no AndroidLottie API Para Animações no Android
Lottie API Para Animações no Android
Vinícius Thiengo
 
PhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de ZoomPhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de Zoom
Vinícius Thiengo
 
Como Impulsionar o App Android - Compartilhamento Nativo
Como Impulsionar o App Android - Compartilhamento NativoComo Impulsionar o App Android - Compartilhamento Nativo
Como Impulsionar o App Android - Compartilhamento Nativo
Vinícius Thiengo
 
Android Studio
Android StudioAndroid Studio
Android Studio
Vinícius Thiengo
 
Estudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogEstudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do Blog
Vinícius Thiengo
 
True Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no AndroidTrue Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no Android
Vinícius Thiengo
 
Annotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no AndroidAnnotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no Android
Vinícius Thiengo
 
Fontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e UsoFontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e Uso
Vinícius Thiengo
 
Introdução ao Github actions - TDC Connections
Introdução ao Github actions - TDC ConnectionsIntrodução ao Github actions - TDC Connections
Introdução ao Github actions - TDC Connections
Guillaume Falourd
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para Android
Sidney Roberto
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Rodrigo Cândido da Silva
 
Programação Android - Básico
Programação Android - BásicoProgramação Android - Básico
Programação Android - Básico
HugoDalevedove
 
Da introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidDa introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento Android
Rodolfo Faquin Della Justina
 
Android Aula 5
Android Aula 5Android Aula 5
Android Aula 5
Erisvaldo Junior
 

Mais procurados (20)

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

Semelhante a ViewModel Android, Como Utilizar Este Componente de Arquitetura

Apresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadasApresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadas
Victor Aldir
 
Historia do mvc, mvp e mvvm no android
Historia do mvc, mvp e mvvm no androidHistoria do mvc, mvp e mvvm no android
Historia do mvc, mvp e mvvm no android
Paulo Sato
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
Renato Groff
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
Renato Groff
 
Gradle spring-hateoas-Lombok
Gradle spring-hateoas-LombokGradle spring-hateoas-Lombok
Gradle spring-hateoas-Lombok
DanielChristofolli
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
Ryan Padilha
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Luiz Costa
 
Angular js
Angular jsAngular js
Angular js
Emerson Silva
 
Asp net mvc
Asp net mvcAsp net mvc
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
Renato Groff
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
Michael Costa
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Renato Groff
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_js
gustavobeavis
 
Aula2 caracteristicas da_tecnologia_de_banco_de_dados
Aula2 caracteristicas da_tecnologia_de_banco_de_dadosAula2 caracteristicas da_tecnologia_de_banco_de_dados
Aula2 caracteristicas da_tecnologia_de_banco_de_dados
Antony Barbosa
 
Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4
Rodrigo Kono
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
Wagner Zaparoli
 
DevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftDevOps & Docker com a stack Microsoft
DevOps & Docker com a stack Microsoft
Graziella Bonizi
 
Django
DjangoDjango
Projetando aplicações para a nuvem
Projetando aplicações para a nuvemProjetando aplicações para a nuvem
Projetando aplicações para a nuvem
Fabrício Lopes Sanchez
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativo
GDGFoz
 

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

Apresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadasApresentacão Android Components - Programando em camadas
Apresentacão Android Components - Programando em camadas
 
Historia do mvc, mvp e mvvm no android
Historia do mvc, mvp e mvvm no androidHistoria do mvc, mvp e mvvm no android
Historia do mvc, mvp e mvvm no android
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
Gradle spring-hateoas-Lombok
Gradle spring-hateoas-LombokGradle spring-hateoas-Lombok
Gradle spring-hateoas-Lombok
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Angular js
Angular jsAngular js
Angular js
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_js
 
Aula2 caracteristicas da_tecnologia_de_banco_de_dados
Aula2 caracteristicas da_tecnologia_de_banco_de_dadosAula2 caracteristicas da_tecnologia_de_banco_de_dados
Aula2 caracteristicas da_tecnologia_de_banco_de_dados
 
Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
DevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftDevOps & Docker com a stack Microsoft
DevOps & Docker com a stack Microsoft
 
Django
DjangoDjango
Django
 
Projetando aplicações para a nuvem
Projetando aplicações para a nuvemProjetando aplicações para a nuvem
Projetando aplicações para a nuvem
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativo
 

Mais de Vinícius Thiengo

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

Mais de Vinícius Thiengo (7)

Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?
 
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
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
5 livros que não são de TI, mas que um desenvolvedor deveria ler5 livros que não são de TI, mas que um desenvolvedor 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
Utilizando Intenções Para Mapas de Alta Qualidade no AndroidUtilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no Android
 
Freelancer Android
Freelancer AndroidFreelancer Android
Freelancer Android
 
Definindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos AndroidDefinindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos Android
 
Material Design
Material DesignMaterial Design
Material Design
 

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