Successfully reported this slideshow.
Your SlideShare is downloading. ×

Intervalo Técnico - QG Mobile

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
My top 10 - rock bands
My top 10 - rock bands
Loading in …3
×

Check these out next

1 of 78 Ad

Intervalo Técnico - QG Mobile

Download to read offline

Intervalo técnico apresentado para os colaboradores da Pitang para que eles façam parte das novidades e melhorias aplicadas no primeiro projeto Android da empresa. Nessa palestra abordamos as fases de proposta, análise e projeto. Alguns frameworks, bibliotecas e plataformas destacadas foram o Retrofit, EventBus, WildFly 8.2, MVP design pattern e ZXing.

Palestrantes: Alex Batista, Daniel Herszenhorn, Felipe Martis, Jader Alcantara, Marcely Santos, Massilon Gomes, Tadeu Marinho e Vitor Albuquerque.

Intervalo técnico apresentado para os colaboradores da Pitang para que eles façam parte das novidades e melhorias aplicadas no primeiro projeto Android da empresa. Nessa palestra abordamos as fases de proposta, análise e projeto. Alguns frameworks, bibliotecas e plataformas destacadas foram o Retrofit, EventBus, WildFly 8.2, MVP design pattern e ZXing.

Palestrantes: Alex Batista, Daniel Herszenhorn, Felipe Martis, Jader Alcantara, Marcely Santos, Massilon Gomes, Tadeu Marinho e Vitor Albuquerque.

Advertisement
Advertisement

More Related Content

Similar to Intervalo Técnico - QG Mobile (20)

Advertisement

Recently uploaded (20)

Intervalo Técnico - QG Mobile

  1. 1. QG - MobileDesafios e Soluções • Massilon Gomes • Tadeu Marinho • Vitor Albuquerque • Alex Batista • Daniel Herszenhorn • Felipe J. Martins • Jader Alcântara • Marcely Santos
  2. 2. Proposta e A&P Massilon Gomes
  3. 3. Proposta e A&P • Cliente: Queiroz Galvão; • Escopo: • Apontamento Eletrônico (App Android); • Baixa de Eventos App (App Android); • Dashboard (JEE7 e Wildfly); • Duração: 17 semanas; • Equipe: Gerente de Projetos, Analista de Negócios, Designer, Arquiteto, 4 Desenvolvedores.
  4. 4. Proposta e A&P Planejamento Concepção Sprints Design Definição Webservices Arquitetura e BD Teste Formal Homologação 5 semanas (Apontamento, Baixa de Eventos e Dashboard) • Planejamento na proposta:
  5. 5. Proposta e A&P Planejamento Concepção Design Definição Webservices Arquitetura e BD 6 semanas (Apontamento e Dashboard) • O que de fato aconteceu: • Cronograma; • Riscos; • ... • Levantamento de informações; • Definição das estórias. • Wireframe; • Construção das telas.
  6. 6. Proposta e A&P • O que fizemos diferente: • 5 semanas de Analista, Arquiteto e Designer fulltime; • 1 semana no cliente pra levantamento de informações (GP, Analista, Arquiteto e Designer); • Foco na estabilização dos requisitos; • Foco na definição da Arquitetura da solução; • Foco no Wireframe da aplicação.
  7. 7. Proposta e A&P • O que ganhamos: • Maior produtividade no desenvolvimento; • Mais confiança nas decisões sobre a arquitetura da solução; • Melhor entendimento da necessidade do cliente, incluindo a usabilidade do aplicativo na obra; • Melhor relacionamento com o cliente.
  8. 8. O Negócio Marcely Santos
  9. 9. O Negócio • Apontamento Eletrônico: • Permitir o apontamento eletrônico das tarefas executadas no canteiro de obras através de um Smartphone e/ou Tablet Android.
  10. 10. O Negócio • Dashboard:
  11. 11. O Negócio • Baixa de Eventos: • Será responsável pela baixa dos eventos executados na obra através de um Smartphone e/ou Tablet Android.
  12. 12. UI Experience Alex Batista
  13. 13. UI Experience • Processo de UX; • Métodos utilizados; • Wireframe; • Design;
  14. 14. UI Experience • Processo de UX:
  15. 15. UI Experience • Métodos: • Entrevista com o usuário; • Cenários; • Personas; • Análise da Tarefa;
  16. 16. UI Experience • Métodos: • Entrevista com o usuário; • Cenários; • Personas; • Análise da Tarefa;
  17. 17. UI Experience • Wireframe; • Design;
  18. 18. Contextualização Tadeu Marinho
  19. 19. Contextualização
  20. 20. Contextualização
  21. 21. REST Client Tadeu Marinho
  22. 22. REST Client Fonte: http://stackoverflow.com/questions/16902716/comparison-of-android-networking-libraries-okhttp-retrofit-volley
  23. 23. Retrofit Tadeu Marinho
  24. 24. Retrofit • API utilizada como alternativa simples, rápida e eficiente em desenvolvimento da camada de comunicação de aplicações que utilizem padrão REST. TW Technology Radar Jan 2015
  25. 25. Retrofit • Web Client
  26. 26. Retrofit • E tem mais ...
  27. 27. Retrofit • E tem mais ...
  28. 28. More... http://square.github.io/retrofit/ http://assets.thoughtworks.com/assets/technology-radar-jan-2015-pt.pdf http://instructure.github.io/blog/2013/12/09/volley-vs-retrofit/ http://stackoverflow.com/questions/16902716/comparison-of-android- networking-libraries-okhttp-retrofit-volley Retrofit
  29. 29. SQLite Tadeu Marinho
  30. 30. SQLite • SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine; • The source code for SQLite is in the public domain; • Development and maintenance of SQLite is sponsored in part by SQLite Consortium members, including: A world leader in financial- information technology. Comprehensive software solutions for Sustaining Infrastructure. Working to preserve choice and innovation on the internet.
  31. 31. SQLite • SQL Ansi (PRAGMA foreign_keys=ON)
  32. 32. SQLite • Performance inserts: private void insertOneHundredRecords() { for (int i = 0; i<100; i++) { ContentValues values = new ContentValues(); values.put("FirstNumber", i); values.put("SecondNumber", i); values.put("Result", i*i); sampleDB.insert(SAMPLE_TABLE_NAME,null,values); } } 1627ms
  33. 33. SQLite • Bulk insertion: private void bulkInsertOneHundredRecords() { String sql = "INSERT INTO " + SAMPLE_TABLE_NAME + " VALUES (?,?,?);"; SQLiteStatement statement = sampleDB.compileStatement(sql); sampleDB.beginTransaction(); for (int i = 0; i < 100; i++) { statement.clearBindings(); statement.bindLong(1, i); statement.bindLong(2, i); statement.bindLong(3, i * i); statement.execute(); } sampleDB.setTransactionSuccessful(); sampleDB.endTransaction(); } 92ms
  34. 34. More... https://www.sqlite.org https://www.sqlite.org/pragma.html#pragma_defer_foreign_keys http://www.techrepublic.com/blog/software-engineer/ turbocharge -your-sqlite-inserts-on-android/ SQLite
  35. 35. MVP Felipe J. Martins
  36. 36. MVC (Model – Controller - View) Controller View Model S S = State of the UI L = UI logic Acronyms: L
  37. 37. MVP (Model – Presenter - View) View (XML) Activity S L Exception Handler! Model Life Cycle! Event Handler! Acronyms: S = State of the UI L = UI logic Acronyms:
  38. 38. View (Class) MVP (Model – Presenter - View) Activity S L Model View (XML) Android API Exception Handler! Life Cycle! Event Handler! S = State of the UI L = UI logic Acronyms:
  39. 39. Presenter View (Class) MVP (Model – Presenter - View) Activity S L ModelView (XML) Android API Exception Handler! Life Cycle! Event Handler! S = State of the UI L = UI logic Acronyms:
  40. 40. Activity Presenter View Model MVP (Android)
  41. 41. Butter KnifeView "injection" library for Android Felipe J. Martins
  42. 42. Butter Knife Field and method binding for Android views which uses annotation processing to generate boilerplate code for you. • Eliminate findViewById calls by using @InjectView on fields. • Eliminate anonymous inner-classes for listeners by annotating methods with @OnClick and others.
  43. 43. TextView textView1; textView1 = (TextView) v.findViewById(R.id.textView1); Toast.makeText(this,textView1.getText(),Toast.LENGTH_SHORT).show(); <TextView android:id=”@+id/textView1” android:layout_width=”wrap_content” android:height=”wrap_content” android:text=”@string/helloWorld” /> Xml Java Butter Knife
  44. 44. fab = (FloatingActionButton) v.findViewById(R.id.fab); totalLayout = (LinearLayout) v.findViewById(R.id.totalLayout); historicoLayout = (LinearLayout) v.findViewById(R.id.historicoLayout); eventosListView = (ListView) v.findViewById(R.id.eventosListView); eventoAtualTextView = (TextView) v.findViewById(R.id.eventoAtualTextView); comecarTempo = (ImageView) v.findViewById(R.id.comecarTempo); totalHoras = (TextView) v.findViewById(R.id.totalHoras); terminoHora = (EditText) v.findViewById(R.id.terminoHora); inicioHora = (EditText) v.findViewById(R.id.inicioHora); nomeEquipamentoText = (TextView) v.findViewById(R.id.nomeEquipamentoText); fotoEquipamento = (ImageView) v.findViewById(R.id.fotoEquipamento); Java Boilerplate code Butter Knife
  45. 45. @InjectView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... } @InjectView Eliminate findViewById calls by using @InjectView on fields. Butter Knife
  46. 46. @OnClick(R.id.submit) public void submit(View view) { // TODO submit data to server... } @OnClick public void submit() { Button submitBtn = (Button) findViewById(R.id.submit); submitBtn.setOnClickListener(new View.OnClickListener() { }); // TODO submit data to server... } Boilerplate code Butter Knife
  47. 47. More... https://github.com/JakeWharton/butterknife Butter Knife
  48. 48. Vitor Albuquerque Envio em Background
  49. 49. Envio em Background • Rodar em background; • Enviar apontamentos ao detectar conexão com a internet; • Enviar os apontamentos esporadicamente (a cada 15 minutos); • Atualizar menu de Enviar Apontamentos após envio ou falha;
  50. 50. Vitor Albuquerque Intent Service
  51. 51. Intent Service • Criando um serviço:
  52. 52. Intent Service • Chamando um serviço:
  53. 53. Vitor Albuquerque AlarmManager
  54. 54. AlarmManager • Criando um alarme:
  55. 55. AlarmManager • Boas práticas: • Não rodar em horário fixo (ex.: Todos os dias às 12h); • Não acordar o aparelho desnecessariamente; • Evitar criar alarmes baseados em tempos fixos; • Evitar alarmes de alta precisão; • Fazer o SO gerenciar os alarmes;
  56. 56. Vitor Albuquerque EventBusAndroid optimized publish/subscribe event bus
  57. 57. EventBus • Como funciona:
  58. 58. EventBus • Le código:
  59. 59. EventBus • Le código:
  60. 60. EventBus • Escutando eventos de serviços background (antes)
  61. 61. EventBus • Resultado da sincronia para a Activity (antes)
  62. 62. EventBus • Vocês agora:
  63. 63. EventBus • Escutando eventos de serviços background (EventBus)
  64. 64. EventBus • Escutando eventos de serviços background (EventBus)
  65. 65. EventBus
  66. 66. Saiba mais... https://github.com/greenrobot/EventBus
  67. 67. Jader Alcântara NFCNear Field Connection
  68. 68. Características • Tecnologia wireless de curta distância (4cm) • Reader/writer mode • P2P mode (Android Bean) • Card emulation mode
  69. 69. Utilização no QG • Processo sem NFC
  70. 70. Utilização no QG • Processo com NFC
  71. 71. Saiba mais... http://nfc-forum.org/
  72. 72. ZXingZebra Crossing Jader Alcântara
  73. 73. ZXing no QG public static void irParaLeitorQrCodeBarras(Fragment fragment) { IntentIntegrator intentIntegrator = IntentIntegrator.forSupportFragment(fragment); intentIntegrator.setPrompt(fragment.getString(R.string.aponte_qrcode)); intentIntegrator.setOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); intentIntegrator.initiateScan(); } Java
  74. 74. Saiba mais... https://github.com/zxing/zxing
  75. 75. Dashboard Daniel Herszenhorn
  76. 76. Características • WildFly; • Maven; • JEE7; • JSF + Primefaces; • WebSocket;
  77. 77. Considerações Finais Tadeu Marinho
  78. 78. Dúvidas?

×