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

Minicurso sobre AndroidAnnotations, GreenDAO, E...

Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton

Minicurso realizado no TechNight (Unisul de Florianópolis), no dia 22/10/14.

Ricardo Longa

October 22, 2014
Tweet

Other Decks in Technology

Transcript

  1. 1. Conhecimento intermediário em Java; 2. Conhecimento básico em Android

    (configurar o ambiente de desenvolvimento / Android SDK / Android AVD, construir e executar um app do tipo HelloWorld); 3. Para notebooks pessoais, preparar o ambiente de desenvolvimento. Pré-requisitos...
  2. 1. Saber clonar um repositório Git do GitHub (git clone);

    2. Saber trocar de branch’s com Git (git checkout); Skills desejáveis...
  3. O que [não] vamos ver... 1. Configurar o ambiente de

    desenvolvimento; 2. Iniciar um projeto do zero;
  4. O que [não] vamos ver... 1. Configurar o ambiente de

    desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git;
  5. O que [não] vamos ver... 1. Configurar o ambiente de

    desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git; 4. Customizar estilos;
  6. O que [não] vamos ver... 1. Configurar o ambiente de

    desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git; 4. Customizar estilos; 5. Boas práticas de programação;
  7. O que [não] vamos ver... 1. Configurar o ambiente de

    desenvolvimento; 2. Iniciar um projeto do zero; 3. Comandos do Git; 4. Customizar estilos; 5. Boas práticas de programação; 6. Ferramentas de build (Gradle ou Maven).
  8. GreenDAO • Framework open-source; • Facilita a comunicação com SQLite;

    • API simples; • Otimizado para Android; • Consumo mínimo de memória;
  9. GreenDAO • Framework open-source; • Facilita a comunicação com SQLite;

    • API simples; • Otimizado para Android; • Consumo mínimo de memória; • Biblioteca pequena (menos de 100k);
  10. GreenDAO • Framework open-source; • Facilita a comunicação com SQLite;

    • API simples; • Otimizado para Android; • Consumo mínimo de memória; • Biblioteca pequena (menos de 100k); • Disponibiliza um gerador de código;
  11. GreenDAO • Framework open-source; • Facilita a comunicação com SQLite;

    • API simples; • Otimizado para Android; • Consumo mínimo de memória; • Biblioteca pequena (menos de 100k); • Disponibiliza um gerador de código; • Camera360 (+50.000.000), Pinterest (+10.000.000), ICQ (+10.000.000), etc.
  12. public static void main(String[] args) throws Exception { Schema schema

    = new Schema(1, "br.com.ricardolonga.todo"); Entity item = schema.addEntity("Item"); item.addIdProperty(); item.addStringProperty("title").notNull(); new DaoGenerator().generateAll(schema, "../todo/src-gen"); } DaoGenerator.java Processing schema version 1... Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/ItemDao.java Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/Item.java Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoMaster.java Written /home/longa/dev/workspace/todo/src-gen/br/com/ricardolonga/todo/DaoSession.java Processed 1 entities in 113ms Resultado...
  13. DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "todo", null); SQLiteDatabase db =

    helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); DaoSession daoSession = daoMaster.newSession(); ItemDao itemDao = daoSession.getItemDao(); Obtendo o ItemDao... Item item = new Item(null, itemTitle); itemDao.insert(item); itemDao.deleteAll(); itemDao.deleteByKey(id); Exemplos...
  14. EventBus • Framework open-source; • Publish/Subscribe model; • Simplifica a

    comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services);
  15. EventBus • Framework open-source; • Publish/Subscribe model; • Simplifica a

    comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services); • “Menos código, maior qualidade”.
  16. EventBus • Framework open-source; • Publish/Subscribe model; • Simplifica a

    comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services); • “Menos código, maior qualidade”; • Camera360 (+50.000.000), Path (+10.000.000), Pinterest (+10.000.000), etc.
  17. public class XyzActivity extends Activity { public void onCreate() {

    EventBus.getDefault().register(this); } public void onEvent(ConnectividadeReceiver.ConectividadeAlterada evento) { // Verifico conexão com a internet e notifico usuário... } public void onPause() { EventBus.getDefault().unregister(this); } } public class ConnectividadeReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { EventBus.getDefault().post(new ConectividadeAlterada()); } public static class ConectividadeAlterada { // Pode até enviar informações por aqui. } } BroadcastReceiver Activity
  18. AndroidAnnotations • Framework open-source; • Simplifica a codificação (reduz boilerplate);

    • Facilita a manutenção; • Permite a injeção de dependências (views, resources, system services, etc);
  19. AndroidAnnotations • Framework open-source; • Simplifica a codificação (reduz boilerplate);

    • Facilita a manutenção; • Permite a injeção de dependências (views, resources, system services, etc); • Facilita o trabalho com threads;
  20. AndroidAnnotations • Event binding, sem mais listeners anônimos; • Rest

    client através da criação de interfaces (o framework irá implementar as interfaces);
  21. AndroidAnnotations • Event binding, sem mais listeners anônimos; • Rest

    client através da criação de interfaces (o framework irá implementar as interfaces); • Não impacta na performance em runtime;
  22. AndroidAnnotations • Event binding, sem mais listeners anônimos; • Rest

    client através da criação de interfaces (o framework irá implementar as interfaces); • Não impacta na performance em runtime; • Tudo isso com menos de 50kb;
  23. AndroidAnnotations • Event binding, sem mais listeners anônimos; • Rest

    client através da criação de interfaces (o framework irá implementar as interfaces); • Não impacta na performance em runtime; • Tudo isso com menos de 50kb; • Call of Duty (+1.000.000), Magic Piano by Smule (+10.000.000), etc.
  24. Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); buttonOne.setOnClickListener(new OnClickListener() { public void

    onClick(View v) { updateBookmarksClicked(); } }); Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); buttonTwo.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } });
  25. @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) void updateBookmarksClicked() { ... } Button buttonOne =

    (Button) findViewById(R.id.updateBookmarksButton1); buttonOne.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } }); Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); buttonTwo.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } });
  26. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final

    String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { }
  27. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final

    String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Cria o RestTemplate // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } }
  28. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final

    String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Cria o RestTemplate // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } }
  29. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final

    String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Cria o RestTemplate // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } } XyzActivity.java
  30. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final

    String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { protected Bookmarks doInBackground(String... params) { // Cria o RestTemplate // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } } XyzActivity.java Inner class
  31. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String

    userId); } BookmarkClient.java @RestService BookmarkClient restClient; @Background void searchAsync(String searchString, String userId) { Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } XyzActivity.java
  32. @RestService BookmarkClient restClient; @Background void searchAsync(String searchString, String userId) {

    Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } @UiThread void updateBookmarks(Bookmarks bookmarks) { // Atualiza a UI Thread } XyzActivity.java @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java