Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Architecture Components: 1 ano depois

Android Architecture Components: 1 ano depois

Depois de um ano da apresentação do Google sobre Android Architecture Components, vamos dar nossas impressões de utilizações em ambiente caos/profissional. Como foi a migração, o que migramos, o que ficou para trás e o porque das decisões.

Avatar for Tomaz Silva

Tomaz Silva

April 20, 2018

More Decks by Tomaz Silva

Other Decks in Programming

Transcript

  1. Android Architecture Components: 1 ano depois Depois de um ano

    da apresentação do Google sobre Android Architecture Components, vamos dar nossas impressões de utilizações em ambiente caos/profissional. Como foi a migração, o que migramos, o que ficou para trás e o por que das decisões.
  2. Agenda - Motivação - Informações - ViewModel - LiveData -

    Room - Lifecycle Aware Components (LAC) - Perguntas
  3. Motivação - Indicado pelo Google - Recomendação de pattern de

    arquitetura - Tornar menos complexo - Melhorar persistência de dados - Partilhar nossa experiência utilizando estes componentes em um projeto complexo
  4. Informações - Utilizado em nossos projetos - Aplicativos publicados (+500k

    downloads) - Projeto em andamento - Projeto complexo
  5. ViewModel - O que é - Guardar e gerenciar dados

    da UI de uma maneira consciente do ciclo de vida
  6. ViewModel - Como usa public class MyViewModel extends ViewModel {

    } public class MyActivity extends AppCompatActivity { public void onCreate(Bundle savedInstanceState) { MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class); model.getUsers().observe(this, users -> { // update UI }); } }
  7. ViewModel - O que gostamos - Dados não se perdem

    na mudança de configuração (rotação de tela)
  8. ViewModel - O que não gostamos - Tivemos algumas dificuldades

    com testes automatizados, mas isso devido a arquitetura do projeto como um todo não estar alinhado com MVVM
  9. ViewModel - Opinião final - Vale a pena mas só

    se estiver iniciando o projeto. - Projetos complexos não tem muito benefício.
  10. LiveData - Como usa private MutableLiveData<String> mCurrentName; mModel = ViewModelProviders.of(this).get(NameViewModel.class);

    final Observer<String> nameObserver = new Observer<String>() { @Override public void onChanged(@Nullable final String newName) { mNameTextView.setText(newName); } }; mModel.getCurrentName().observe(this, nameObserver);
  11. LiveData - O que gostamos - Garante que sua interface

    do usuário corresponda ao seu estado de dados - Não há vazamentos de memória
  12. LiveData - O que não gostamos - Quando os dados

    forem mudar de uma forma especial, começa a ficar complicado.
  13. LiveData - Opinião final - Não vale a pena. O

    ganho não é muito. - É melhor fazer um pouco mais de código e saber exatamente como alterá-los e quando alterá-los - Alternativa é usar diretamente ReactiveX
  14. Room- Como usa @Dao public interface ItemDao { @Query("SELECT *

    FROM List") List<Item> getItems(); @Insert int insert(Item item); @Update void update(Item item); @Delete void delete(Item item); }
  15. Room- Como usa @Entity(tableName = "item") public class Item{ @PrimaryKey(autoGenerate

    = true) int id; @ColumnInfo(name = "item_name") String name; @Ignore String type; }
  16. Room- O que gostamos - Reduz bastante a quantidade de

    código - Mapeamento de objetos para SQL - Verificação em tempo de compilação de erros nas consultas SQL - Suporte a Rx
  17. Room- O que não gostamos - Só consegue mapear automaticamente

    tipos primitivos de dados, necessários desenvolver TypeConverter para outros tipos - Não consegue mapear relacionamento entre classes
  18. Room- Opinião final - Na nossa opinião o componente mais

    útil - Simplifica bastante o uso de SQL nas aplicações - Código mais limpo e elegante
  19. LifeCycle - O que é - Provê uma interface para

    a construção de componentes que se ajustam dinamicamente às mudanças de estado no ciclo de vida de activities/fragments
  20. LifeCycle - Como usa public class LifeCycleAwareClass implements LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void doSomething() { ... } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void stopSomething() { ... } } class MyLifeCycleOwner extends AppCompatActivity { public void onCreate(...) { getLifecycle().addObserver(new LifeCycleAwareClass); } }
  21. LifeCycle - O que gostamos - De uma forma simples

    permite acompanhar o ciclo de vida de uma activity/fragment - Reduz o tamanho dos contratos entre a View e a ViewModel
  22. LifeCycle - Opinião final - O mais simples dos componentes

    da biblioteca - Facil de usar - Pode ser utilizado com o pattern de arquitetura que você preferir
  23. Considerações finais - Não é necessário usar todos os componentes

    da biblioteca juntos - Os componentes podem ser usados com diversos patterns de arquitetura(MVC, MVP, MVVM) - Cada componente tem suas vantagens e desvantagens, é necessário pesar elas e verificar se seu projeto tem ganho fazendo uso dos componentes - Biblioteca nova! Esperamos updates/upgrades