SlideShare uma empresa Scribd logo
1 de 107
Treze ferramentas/frameworks 
para desenvolvimento Android
AndroidKickstartR 
● SaaS útil para criar um novo projeto 
Android;
AndroidKickstartR 
● SaaS útil para criar um novo projeto 
Android; 
● Acesse www.androidkickstartr.com...
ActionBar-PullToRefresh 
● Framework open-source;
ActionBar-PullToRefresh 
● Framework open-source; 
● Compatível com ActionBar e 
ActionBarSherlock;
ActionBar-PullToRefresh 
● Framework open-source; 
● Compatível com ActionBar e 
ActionBarSherlock; 
● Roda no Android API level 14 ou superior 
(para API level inferior a 14, utilize a 
ActionBarCompact);
ActionBar-PullToRefresh 
● Framework open-source; 
● Compatível com ActionBar e 
ActionBarSherlock; 
● Roda no Android API level 14 ou superior 
(para API level inferior a 14, utilize a 
ActionBarCompact); 
● Nativo a partir da API 20 (L Preview): 
SwipeRefreshLayout.
GSon 
● Framework open-source da Google;
GSon 
● Framework open-source da Google; 
● Converte objetos Java em uma 
representação Json, e vice-versa.
User user = new User(); 
user.setId(123456); 
user.setName("Ricardo Longa"); 
Gson gson = new Gson(); 
String json = gson.toJson(user); 
User user = gson.fromJson(json, User.class);
SmoothProgressBar 
● Framework open-source;
SmoothProgressBar 
● Framework open-source; 
● Permite criar uma barra de progresso mais 
suave;
SmoothProgressBar 
● Framework open-source; 
● Permite criar uma barra de progresso mais 
suave; 
● App de exemplo: 
https://play.google.com/store/apps/details?id 
=fr.castorflex.android.smoothprogressbar.sa 
mple;
SmoothProgressBar 
● Framework open-source; 
● Permite criar uma barra de progresso mais 
suave; 
● App de exemplo: 
https://play.google.com/store/apps/details?id 
=fr.castorflex.android.smoothprogressbar.sa 
mple; 
● Yahoo Mail (+50.000.000), Photo Editor by Aviary 
(+50.000.000), Tinder (+10.000.000), etc.
EventBus 
● Framework open-source;
EventBus 
● Framework open-source; 
● Publish/Subscribe model;
EventBus 
● Framework open-source; 
● Publish/Subscribe model; 
● Simplifica a comunicação entre 
componentes (Activities, Fragments, BroadcastReceivers, 
Threads, Services);
EventBus 
● Framework open-source; 
● Publish/Subscribe model; 
● Simplifica a comunicação entre 
componentes (Activities, Fragments, BroadcastReceivers, 
Threads, Services); 
● “Menos código, maior qualidade”.
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.
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) { 
Activity 
EventBus.getDefault().post(new ConectividadeAlterada()); 
} 
public static class ConectividadeAlterada { 
// Pode até enviar informações por aqui. 
} 
} 
BroadcastReceiver
Android Asynchronous Http Client 
● Framework open-source;
Android Asynchronous Http Client 
● Framework open-source; 
● Encapsula a biblioteca HttpClient da 
Apache;
Android Asynchronous Http Client 
● Framework open-source; 
● Encapsula a biblioteca HttpClient da 
Apache; 
● A requisição acontece fora da UI Thread;
Android Asynchronous Http Client 
● Framework open-source; 
● Encapsula a biblioteca HttpClient da 
Apache; 
● A requisição acontece fora da UI Thread; 
● O callback é executado na UI Thread;
Android Asynchronous Http Client 
● Framework open-source; 
● Encapsula a biblioteca HttpClient da 
Apache; 
● A requisição acontece fora da UI Thread; 
● O callback é executado na UI Thread; 
● Pode ser executado em um Service;
Android Asynchronous Http Client 
● Framework open-source; 
● Encapsula a biblioteca HttpClient da 
Apache; 
● A requisição acontece fora da UI Thread; 
● O callback é executado na UI Thread; 
● Pode ser executado em um Service; 
● A biblioteca identifica automaticamente o 
contexto em que foi disparada;
Android Asynchronous Http Client 
● Framework open-source; 
● Encapsula a biblioteca HttpClient da 
Apache; 
● A requisição acontece fora da UI Thread; 
● O callback é executado na UI Thread; 
● Pode ser executado em um Service; 
● A biblioteca identifica automaticamente o 
contexto em que foi disparada; 
● Instagram (+100.000.000), MercadoLibre (+10.000.000), 
Duolingo (+10.000.000), etc.
AsyncHttpClient client = new AsyncHttpClient(); 
client.get("http://www.google.com", new AsyncHttpResponseHandler() { 
@Override 
public void onStart() { 
// called before request is started 
} 
@Override 
public void onSuccess(int statusCode, Header[] headers, byte[] response) { 
// called when response HTTP status is "200 OK" 
} 
@Override 
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { 
// called when response HTTP status is "4XX" (eg. 401, 403, 404) 
} 
@Override 
public void onRetry(int retryNo) { 
// called when request is retried 
}});
AndroidAnnotations 
● Framework open-source;
AndroidAnnotations 
● Framework open-source; 
● Simplifica a codificação (reduz boilerplate);
AndroidAnnotations 
● Framework open-source; 
● Simplifica a codificação (reduz boilerplate); 
● Facilita a manutenção;
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);
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;
AndroidAnnotations 
● Event binding, sem mais listeners anônimos;
AndroidAnnotations 
● Event binding, sem mais listeners anônimos; 
● Rest client através da criação de interfaces 
(o framework irá implementar as interfaces);
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;
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;
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.
ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList);
ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList); 
@ViewById 
ListView bookmarkList;
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(); 
} 
});
Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); 
buttonOne.setOnClickListener(new OnClickListener() { 
@Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) 
void updateBookmarksClicked() { 
... 
} 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
}); 
Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); 
buttonTwo.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
updateBookmarksClicked(); 
} 
});
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
}
void updateBookmarksClicked() { 
new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); 
} 
private static final String BOOKMARK_URL = 
"http://www.bookmarks.com/bookmarks/{userId}?search={search}";
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> { 
}
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) { 
// Recebe parâmetros 
// Cria o RestTemplate 
// Cria o HttpHeaders 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
}
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) { 
// Recebe parâmetros 
// Cria o RestTemplate 
// Cria o HttpHeaders 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
protected void onPostExecute(Bookmarks result) { 
// Atualiza a UI Thread 
} 
}
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) { 
// Recebe parâmetros 
// Cria o RestTemplate 
// Cria o HttpHeaders 
// 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
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) { 
// Recebe parâmetros 
// Cria o RestTemplate 
// Cria o HttpHeaders 
// Cria o HttpEntity 
// Invoca o método exchange 
// Obtém e retorna o Bookmarks 
} 
protected void onPostExecute(Bookmarks result) { 
// Atualiza a UI Thread 
} 
} 
Inner class 
XyzActivity.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
} 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String 
userId); 
} BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String 
@RestService 
BookmarkClient restClient; 
userId); 
} 
XyzActivity.java 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String 
@RestService 
BookmarkClient restClient; 
@Background 
void searchAsync(String searchString, String userId) { 
Bookmarks bookmarks = restClient.getBookmarks(searchString, 
userId); 
updateBookmarks(bookmarks); 
} 
userId); 
} 
XyzActivity.java 
BookmarkClient.java
@Rest("http://www.bookmarks.com") 
public interface BookmarkClient { 
@Get("/bookmarks/{userId}?search={search}") 
Bookmarks getBookmarks(String search, String 
@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 
} 
userId); 
} 
XyzActivity.java 
BookmarkClient.java
Universal Image Loader 
● Framework open-source;
Universal Image Loader 
● Framework open-source; 
● Biblioteca flexível para carregamento, cache 
e exibição de imagens;
Universal Image Loader 
● Framework open-source; 
● Biblioteca flexível para carregamento, cache 
e exibição de imagens; 
● Multithread (async ou sync);
Universal Image Loader 
● Framework open-source; 
● Biblioteca flexível para carregamento, cache 
e exibição de imagens; 
● Multithread (async ou sync); 
● Cache em memória ou SD card;
Universal Image Loader 
● Framework open-source; 
● Biblioteca flexível para carregamento, cache 
e exibição de imagens; 
● Multithread (async ou sync); 
● Cache em memória ou SD card; 
● API level 5 ou superior;
Universal Image Loader 
● Framework open-source; 
● Biblioteca flexível para carregamento, cache 
e exibição de imagens; 
● Multithread (async ou sync); 
● Cache em memória ou SD card; 
● API level 5 ou superior; 
● Clean Master (+100.000.000), Camera360 
(+50.000.000), etc.
public class MyActivity extends Activity { 
@Override 
public void onCreate() { 
super.onCreate(); 
// Criar configuração global e inicializa o ImageLoader 
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) 
... 
.build(); 
ImageLoader.getInstance().init(config); 
... 
}}
String imageUri = "http://site.com/image.png"; // da Web 
String imageUri = "file:///mnt/sdcard/image.png"; // do SD card 
String imageUri = "content://media/external/audio/albumart/1"; // de um content provider 
String imageUri = "assets://image.png"; // dos assets 
String imageUri = "drawable://" + R.drawable.img; // dos drawables (non-9patch images) 
// Carrega a imagem em uma ImageView 
imageLoader.displayImage(imageUri, imageView); 
// Carregar imagem, decodificá-lo para Bitmap e retorna o Bitmap pro callback 
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() { 
@Override 
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
// Faça o que quiser 
}});
GreenDAO 
● Framework open-source;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android;
GreenDAO 
● Framework open-source; 
● Facilita a comunicação com SQLite; 
● API simples; 
● Otimizado para Android; 
● Consumo mínimo de memória;
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);
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;
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.
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 
Resultado... 
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
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...
DroidParts 
● Injeção de Dependência para Views, 
Fragments, Services, qualquer coisa;
DroidParts 
● Injeção de Dependência para Views, 
Fragments, Services, qualquer coisa; 
● ORM - Uso eficiente de persistência com 
Cursor e API fluente;
DroidParts 
● Injeção de Dependência para Views, 
Fragments, Services, qualquer coisa; 
● ORM - Uso eficiente de persistência com 
Cursor e API fluente; 
● EventBus para subscrever e postar eventos;
DroidParts 
● Injeção de Dependência para Views, 
Fragments, Services, qualquer coisa; 
● ORM - Uso eficiente de persistência com 
Cursor e API fluente; 
● EventBus para subscrever e postar eventos; 
● Simples (des)serialização JSON capaz de 
lidar com objetos aninhados;
DroidParts 
● Injeção de Dependência para Views, 
Fragments, Services, qualquer coisa; 
● ORM - Uso eficiente de persistência com 
Cursor e API fluente; 
● EventBus para subscrever e postar eventos; 
● Simples (des)serialização JSON capaz de 
lidar com objetos aninhados; 
● Mesma coisa com XML;
DroidParts 
● Injeção de Dependência para Views, 
Fragments, Services, qualquer coisa; 
● ORM - Uso eficiente de persistência com 
Cursor e API fluente; 
● EventBus para subscrever e postar eventos; 
● Simples (des)serialização JSON capaz de 
lidar com objetos aninhados; 
● Mesma coisa com XML; 
● Melhor forma de lidar com AsyncTask e 
IntentService com Exceções;
DroidParts 
● Logger que descobre sua TAG e registra 
qualquer objeto;
DroidParts 
● Logger que descobre sua TAG e registra 
qualquer objeto; 
● RESTClient para GET, PUT, POST, 
DELETE & InputStream-getting, e também 
conversa com JSON;
DroidParts 
● Logger que descobre sua TAG e registra 
qualquer objeto; 
● RESTClient para GET, PUT, POST, 
DELETE & InputStream-getting, e também 
conversa com JSON; 
● ImageFetcher para anexar de forma 
assíncrona imagens para ImageViews, com 
caching, cross-fade e apoio transformação;
DroidParts 
● Logger que descobre sua TAG e registra 
qualquer objeto; 
● RESTClient para GET, PUT, POST, 
DELETE & InputStream-getting, e também 
conversa com JSON; 
● ImageFetcher para anexar de forma 
assíncrona imagens para ImageViews, com 
caching, cross-fade e apoio transformação; 
● Muito mais...
Robotium 
● Framework para automação de testes;
Robotium 
● Framework para automação de testes; 
● Robotium Recorder (trial);
Robotium 
● Framework para automação de testes; 
● Robotium Recorder (trial); 
● Suporta aplicações nativas e híbridas;
Robotium 
● Framework para automação de testes; 
● Robotium Recorder (trial); 
● Suporta aplicações nativas e híbridas; 
● Foco em testes de caixa preta;
Robotium 
● Framework para automação de testes; 
● Robotium Recorder (trial); 
● Suporta aplicações nativas e híbridas; 
● Foco em testes de caixa preta; 
● Similar ao Selenium (aplicações web);
Robotium 
● Framework para automação de testes; 
● Robotium Recorder (trial); 
● Suporta aplicações nativas e híbridas; 
● Foco em testes de caixa preta; 
● Similar ao Selenium (aplicações web); 
● Integração com Ant/Maven/Gradle para a 
execução dos testes na integração contínua.
Genymotion 
● Emulador Android alternativo;
Genymotion 
● Emulador Android alternativo; 
● Rápido e intuitivo (fácil de usar);
Genymotion 
● Emulador Android alternativo; 
● Rápido e intuitivo (fácil de usar); 
● Utilizado por mais de 1.500.000 devs;
Genymotion 
● Emulador Android alternativo; 
● Rápido e intuitivo (fácil de usar); 
● Utilizado por mais de 1.500.000 devs; 
● Possibilita controle total do AVD (bateria, 
GPS, acelerômetro, etc);
Genymotion 
● Emulador Android alternativo; 
● Rápido e intuitivo (fácil de usar); 
● Utilizado por mais de 1.500.000 devs; 
● Possibilita controle total do AVD (bateria, 
GPS, acelerômetro, etc); 
● Integra-se ao Eclipse através de um plugin;
Genymotion 
● Emulador Android alternativo; 
● Rápido e intuitivo (fácil de usar); 
● Utilizado por mais de 1.500.000 devs; 
● Possibilita controle total do AVD (bateria, 
GPS, acelerômetro, etc); 
● Integra-se ao Eclipse através de um plugin; 
● Roda em Windows, MacOS e Linux.
HAXM 
● Acelera o funcionamento do emulador do 
Android para processadores Intel;
HAXM 
● Acelera o funcionamento do emulador do 
Android para processadores Intel; 
● É necessário baixar a imagem x86 no 
Android SDK;
HAXM 
● Acelera o funcionamento do emulador do 
Android para processadores Intel; 
● É necessário baixar a imagem x86 no 
Android SDK; 
● Não tem suporte nativo para Google Play;
Referências 
● http://www.appbrain.com/stats/libraries/dev 
● http://www.tutecentral.com/android-pull-to-refresh/ 
● https://github.com/greenrobot/EventBus 
● https://code.google.com/p/google-gson/ 
● https://github.com/castorflex/SmoothProgres 
sBar 
● http://sharedstate.net/archives/pull-to-refresh 
● http://loopj.com/android-async-http/ 
● http://viewpagerindicator.com/
Referências 
● https://github.com/nostra13/Android- 
Universal-Image-Loader 
● https://github.com/excilys/androidannotation 
s 
● http://androidkickstartr.com/ 
● http://greendao-orm.com/ 
● https://software.intel.com/pt-br/android 
● http://www.genymotion.com/ 
● https://code.google.com/p/robotium/
Referências 
● http://blog.globalcode.com.br/2012/02/json-facil- 
em-java-com-gson.html 
● http://pt.slideshare.net/Infinum/infinum-android- 
talks-02-eventbus 
● http://droidparts.org/ 
● https://software.intel.com/en-us/ 
android/articles/intel-hardware-accelerated- 
execution-manager
Obrigado! 
@ricardolonga 
http://about.me/ricardo.longa 
ricardo.longa@gmail.com 
@driflash 
http://www.creativedev.com.br 
contato@creativedev.com.br

Mais conteúdo relacionado

Mais procurados

Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introduçãoJosino Rodrigues
 
Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Lucas Aquiles
 
Introdução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderosoIntrodução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderosoBruno Lopes
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasRodrigo Branas
 
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsTDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsDiego Castro
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - BrazilStephen Chin
 
One Language to Rule Them All: TypeScript
One Language to Rule Them All: TypeScriptOne Language to Rule Them All: TypeScript
One Language to Rule Them All: TypeScriptLoiane Groner
 
Oficina groovy grails - infoway
Oficina  groovy grails - infowayOficina  groovy grails - infoway
Oficina groovy grails - infowayLucas Aquiles
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
Android com Firebase
Android com FirebaseAndroid com Firebase
Android com FirebaseRoberto Lopes
 
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSAplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSJackson F. de A. Mafra
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...tdc-globalcode
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresqlGerdan Santos
 

Mais procurados (19)

Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Introdução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderosoIntrodução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderoso
 
Groovy grails
Groovy grailsGroovy grails
Groovy grails
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
 
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsTDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
 
Grails
GrailsGrails
Grails
 
One Language to Rule Them All: TypeScript
One Language to Rule Them All: TypeScriptOne Language to Rule Them All: TypeScript
One Language to Rule Them All: TypeScript
 
Grails
GrailsGrails
Grails
 
Oficina groovy grails - infoway
Oficina  groovy grails - infowayOficina  groovy grails - infoway
Oficina groovy grails - infoway
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Android com Firebase
Android com FirebaseAndroid com Firebase
Android com Firebase
 
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSAplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresql
 

Destaque

Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)Ricardo Longa
 
Aula 05/06 (Notification)
Aula 05/06 (Notification)Aula 05/06 (Notification)
Aula 05/06 (Notification)Ricardo Longa
 
Android Palestra
Android PalestraAndroid Palestra
Android PalestraRenato
 
Aula 5 - 24/04 (Landscape / Portrait)
Aula 5 - 24/04 (Landscape / Portrait)Aula 5 - 24/04 (Landscape / Portrait)
Aula 5 - 24/04 (Landscape / Portrait)Ricardo Longa
 
Pomodoro agil
Pomodoro agilPomodoro agil
Pomodoro agilRenato
 
android_overview
android_overviewandroid_overview
android_overviewRenato
 
Android na prática - USCS
Android na prática - USCSAndroid na prática - USCS
Android na prática - USCSRenato
 
Aula 10 04 (intents)
Aula 10 04 (intents)Aula 10 04 (intents)
Aula 10 04 (intents)Ricardo Longa
 
Aula 10 04 (Gerenciadores de layouts)
Aula 10 04 (Gerenciadores de layouts)Aula 10 04 (Gerenciadores de layouts)
Aula 10 04 (Gerenciadores de layouts)Ricardo Longa
 
Aula 22/05 (Handler)
Aula 22/05 (Handler)Aula 22/05 (Handler)
Aula 22/05 (Handler)Ricardo Longa
 
Introduction Android - C.E.S.A.R
Introduction Android - C.E.S.A.RIntroduction Android - C.E.S.A.R
Introduction Android - C.E.S.A.RRenato
 
Aula04 android intents
Aula04 android intentsAula04 android intents
Aula04 android intentsRoberson Alves
 
Aula 6 - 08/05 (SharedPreferences)
Aula 6 - 08/05 (SharedPreferences)Aula 6 - 08/05 (SharedPreferences)
Aula 6 - 08/05 (SharedPreferences)Ricardo Longa
 
K19 k41 Desenvolvimento Mobile com Android
K19 k41 Desenvolvimento Mobile com AndroidK19 k41 Desenvolvimento Mobile com Android
K19 k41 Desenvolvimento Mobile com AndroidAline Diniz
 
Aula 6 - 08/05 (Menu)
Aula 6 - 08/05 (Menu)Aula 6 - 08/05 (Menu)
Aula 6 - 08/05 (Menu)Ricardo Longa
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)Natanael Fonseca
 
Aula 29/05 (AlarmManager)
Aula 29/05 (AlarmManager)Aula 29/05 (AlarmManager)
Aula 29/05 (AlarmManager)Ricardo Longa
 

Destaque (20)

Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)
 
Aula 05/06 (Notification)
Aula 05/06 (Notification)Aula 05/06 (Notification)
Aula 05/06 (Notification)
 
Android Palestra
Android PalestraAndroid Palestra
Android Palestra
 
Aula 5 - 24/04 (Landscape / Portrait)
Aula 5 - 24/04 (Landscape / Portrait)Aula 5 - 24/04 (Landscape / Portrait)
Aula 5 - 24/04 (Landscape / Portrait)
 
Pomodoro agil
Pomodoro agilPomodoro agil
Pomodoro agil
 
android_overview
android_overviewandroid_overview
android_overview
 
Android na prática - USCS
Android na prática - USCSAndroid na prática - USCS
Android na prática - USCS
 
Aula 10 04 (intents)
Aula 10 04 (intents)Aula 10 04 (intents)
Aula 10 04 (intents)
 
Aula 12/06 (SQLite)
Aula 12/06 (SQLite)Aula 12/06 (SQLite)
Aula 12/06 (SQLite)
 
Aula 10 04 (Gerenciadores de layouts)
Aula 10 04 (Gerenciadores de layouts)Aula 10 04 (Gerenciadores de layouts)
Aula 10 04 (Gerenciadores de layouts)
 
Aula 22/05 (Handler)
Aula 22/05 (Handler)Aula 22/05 (Handler)
Aula 22/05 (Handler)
 
Introduction Android - C.E.S.A.R
Introduction Android - C.E.S.A.RIntroduction Android - C.E.S.A.R
Introduction Android - C.E.S.A.R
 
Aula04 android intents
Aula04 android intentsAula04 android intents
Aula04 android intents
 
Aula 6 - 08/05 (SharedPreferences)
Aula 6 - 08/05 (SharedPreferences)Aula 6 - 08/05 (SharedPreferences)
Aula 6 - 08/05 (SharedPreferences)
 
K19 k41 Desenvolvimento Mobile com Android
K19 k41 Desenvolvimento Mobile com AndroidK19 k41 Desenvolvimento Mobile com Android
K19 k41 Desenvolvimento Mobile com Android
 
Oficina Sesc Android - V1
Oficina Sesc Android - V1Oficina Sesc Android - V1
Oficina Sesc Android - V1
 
Aula 6 - 08/05 (Menu)
Aula 6 - 08/05 (Menu)Aula 6 - 08/05 (Menu)
Aula 6 - 08/05 (Menu)
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
 
Aula 29/05 (AlarmManager)
Aula 29/05 (AlarmManager)Aula 29/05 (AlarmManager)
Aula 29/05 (AlarmManager)
 
Tutorial Android - Activities
Tutorial Android - ActivitiesTutorial Android - Activities
Tutorial Android - Activities
 

Semelhante a Treze ferramentas/frameworks para desenvolvimento android

Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsNelson Glauber Leal
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Alex Guido
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftJuliana Chahoud
 
FAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e CordovaFAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e CordovaLoiane Groner
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileVitor Albuquerque
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao androidMessias Batista
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de Aguirre
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de AguirreMobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de Aguirre
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de AguirreDextra
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias WebRildo Pragana
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Androidjoaobmonteiro
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de testeMarcos Pessoa
 

Semelhante a Treze ferramentas/frameworks para desenvolvimento android (20)

Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android Libs
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
 
FAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e CordovaFAESA Computação Móvel: Introducao a Phonegap e Cordova
FAESA Computação Móvel: Introducao a Phonegap e Cordova
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Chromecast na Qcon RJ
Chromecast na Qcon RJChromecast na Qcon RJ
Chromecast na Qcon RJ
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
New Relic Insights
New Relic InsightsNew Relic Insights
New Relic Insights
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
 
TDC 2015 Florianopolis
TDC 2015 FlorianopolisTDC 2015 Florianopolis
TDC 2015 Florianopolis
 
Angular js
Angular jsAngular js
Angular js
 
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de Aguirre
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de AguirreMobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de Aguirre
MobCamp 2014 :: Chromecast seu aplicativo na TV - Ivan de Aguirre
 
Chromecast
ChromecastChromecast
Chromecast
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias Web
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
Python 08
Python 08Python 08
Python 08
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 

Mais de Ricardo Longa

JSR 339 - Java API for RESTful Web Services
JSR 339 - Java API for RESTful Web ServicesJSR 339 - Java API for RESTful Web Services
JSR 339 - Java API for RESTful Web ServicesRicardo Longa
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Ricardo Longa
 
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 AndroidRicardo Longa
 
Da introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowDa introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowRicardo Longa
 

Mais de Ricardo Longa (7)

Adopt a JSR
Adopt a JSRAdopt a JSR
Adopt a JSR
 
JSR 339 - Java API for RESTful Web Services
JSR 339 - Java API for RESTful Web ServicesJSR 339 - Java API for RESTful Web Services
JSR 339 - Java API for RESTful Web Services
 
JBoss Forge 2
JBoss Forge 2JBoss Forge 2
JBoss Forge 2
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
 
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
 
Open Networking
Open NetworkingOpen Networking
Open Networking
 
Da introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowDa introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools Flow
 

Treze ferramentas/frameworks para desenvolvimento android

  • 1. Treze ferramentas/frameworks para desenvolvimento Android
  • 2. AndroidKickstartR ● SaaS útil para criar um novo projeto Android;
  • 3. AndroidKickstartR ● SaaS útil para criar um novo projeto Android; ● Acesse www.androidkickstartr.com...
  • 4.
  • 6. ActionBar-PullToRefresh ● Framework open-source; ● Compatível com ActionBar e ActionBarSherlock;
  • 7. ActionBar-PullToRefresh ● Framework open-source; ● Compatível com ActionBar e ActionBarSherlock; ● Roda no Android API level 14 ou superior (para API level inferior a 14, utilize a ActionBarCompact);
  • 8. ActionBar-PullToRefresh ● Framework open-source; ● Compatível com ActionBar e ActionBarSherlock; ● Roda no Android API level 14 ou superior (para API level inferior a 14, utilize a ActionBarCompact); ● Nativo a partir da API 20 (L Preview): SwipeRefreshLayout.
  • 9.
  • 10. GSon ● Framework open-source da Google;
  • 11. GSon ● Framework open-source da Google; ● Converte objetos Java em uma representação Json, e vice-versa.
  • 12. User user = new User(); user.setId(123456); user.setName("Ricardo Longa"); Gson gson = new Gson(); String json = gson.toJson(user); User user = gson.fromJson(json, User.class);
  • 14. SmoothProgressBar ● Framework open-source; ● Permite criar uma barra de progresso mais suave;
  • 15. SmoothProgressBar ● Framework open-source; ● Permite criar uma barra de progresso mais suave; ● App de exemplo: https://play.google.com/store/apps/details?id =fr.castorflex.android.smoothprogressbar.sa mple;
  • 16. SmoothProgressBar ● Framework open-source; ● Permite criar uma barra de progresso mais suave; ● App de exemplo: https://play.google.com/store/apps/details?id =fr.castorflex.android.smoothprogressbar.sa mple; ● Yahoo Mail (+50.000.000), Photo Editor by Aviary (+50.000.000), Tinder (+10.000.000), etc.
  • 17. EventBus ● Framework open-source;
  • 18. EventBus ● Framework open-source; ● Publish/Subscribe model;
  • 19. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services);
  • 20. EventBus ● Framework open-source; ● Publish/Subscribe model; ● Simplifica a comunicação entre componentes (Activities, Fragments, BroadcastReceivers, Threads, Services); ● “Menos código, maior qualidade”.
  • 21. 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.
  • 22. 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) { Activity EventBus.getDefault().post(new ConectividadeAlterada()); } public static class ConectividadeAlterada { // Pode até enviar informações por aqui. } } BroadcastReceiver
  • 23. Android Asynchronous Http Client ● Framework open-source;
  • 24. Android Asynchronous Http Client ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache;
  • 25. Android Asynchronous Http Client ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache; ● A requisição acontece fora da UI Thread;
  • 26. Android Asynchronous Http Client ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache; ● A requisição acontece fora da UI Thread; ● O callback é executado na UI Thread;
  • 27. Android Asynchronous Http Client ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache; ● A requisição acontece fora da UI Thread; ● O callback é executado na UI Thread; ● Pode ser executado em um Service;
  • 28. Android Asynchronous Http Client ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache; ● A requisição acontece fora da UI Thread; ● O callback é executado na UI Thread; ● Pode ser executado em um Service; ● A biblioteca identifica automaticamente o contexto em que foi disparada;
  • 29. Android Asynchronous Http Client ● Framework open-source; ● Encapsula a biblioteca HttpClient da Apache; ● A requisição acontece fora da UI Thread; ● O callback é executado na UI Thread; ● Pode ser executado em um Service; ● A biblioteca identifica automaticamente o contexto em que foi disparada; ● Instagram (+100.000.000), MercadoLibre (+10.000.000), Duolingo (+10.000.000), etc.
  • 30. AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onStart() { // called before request is started } @Override public void onSuccess(int statusCode, Header[] headers, byte[] response) { // called when response HTTP status is "200 OK" } @Override public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { // called when response HTTP status is "4XX" (eg. 401, 403, 404) } @Override public void onRetry(int retryNo) { // called when request is retried }});
  • 32. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate);
  • 33. AndroidAnnotations ● Framework open-source; ● Simplifica a codificação (reduz boilerplate); ● Facilita a manutenção;
  • 34. 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);
  • 35. 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;
  • 36. AndroidAnnotations ● Event binding, sem mais listeners anônimos;
  • 37. AndroidAnnotations ● Event binding, sem mais listeners anônimos; ● Rest client através da criação de interfaces (o framework irá implementar as interfaces);
  • 38. 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;
  • 39. 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;
  • 40. 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.
  • 41. ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList);
  • 42. ListView bookmarkList = (ListView) findViewById(R.id.bookmarkList); @ViewById ListView bookmarkList;
  • 43. 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(); } });
  • 44. Button buttonOne = (Button) findViewById(R.id.updateBookmarksButton1); buttonOne.setOnClickListener(new OnClickListener() { @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) void updateBookmarksClicked() { ... } public void onClick(View v) { updateBookmarksClicked(); } }); Button buttonTwo = (Button) findViewById(R.id.updateBookmarksButton2); buttonTwo.setOnClickListener(new OnClickListener() { public void onClick(View v) { updateBookmarksClicked(); } });
  • 45. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); }
  • 46. void updateBookmarksClicked() { new UpdateBookmarksTask().execute(search.getText().toString(), application.getUserId()); } private static final String BOOKMARK_URL = "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
  • 47. 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> { }
  • 48. 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) { // Recebe parâmetros // Cria o RestTemplate // Cria o HttpHeaders // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } }
  • 49. 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) { // Recebe parâmetros // Cria o RestTemplate // Cria o HttpHeaders // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } }
  • 50. 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) { // Recebe parâmetros // Cria o RestTemplate // Cria o HttpHeaders // 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
  • 51. 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) { // Recebe parâmetros // Cria o RestTemplate // Cria o HttpHeaders // Cria o HttpEntity // Invoca o método exchange // Obtém e retorna o Bookmarks } protected void onPostExecute(Bookmarks result) { // Atualiza a UI Thread } } Inner class XyzActivity.java
  • 52. @Rest("http://www.bookmarks.com") public interface BookmarkClient { } BookmarkClient.java
  • 53. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String userId); } BookmarkClient.java
  • 54. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String @RestService BookmarkClient restClient; userId); } XyzActivity.java BookmarkClient.java
  • 55. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String @RestService BookmarkClient restClient; @Background void searchAsync(String searchString, String userId) { Bookmarks bookmarks = restClient.getBookmarks(searchString, userId); updateBookmarks(bookmarks); } userId); } XyzActivity.java BookmarkClient.java
  • 56. @Rest("http://www.bookmarks.com") public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}") Bookmarks getBookmarks(String search, String @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 } userId); } XyzActivity.java BookmarkClient.java
  • 57. Universal Image Loader ● Framework open-source;
  • 58. Universal Image Loader ● Framework open-source; ● Biblioteca flexível para carregamento, cache e exibição de imagens;
  • 59. Universal Image Loader ● Framework open-source; ● Biblioteca flexível para carregamento, cache e exibição de imagens; ● Multithread (async ou sync);
  • 60. Universal Image Loader ● Framework open-source; ● Biblioteca flexível para carregamento, cache e exibição de imagens; ● Multithread (async ou sync); ● Cache em memória ou SD card;
  • 61. Universal Image Loader ● Framework open-source; ● Biblioteca flexível para carregamento, cache e exibição de imagens; ● Multithread (async ou sync); ● Cache em memória ou SD card; ● API level 5 ou superior;
  • 62. Universal Image Loader ● Framework open-source; ● Biblioteca flexível para carregamento, cache e exibição de imagens; ● Multithread (async ou sync); ● Cache em memória ou SD card; ● API level 5 ou superior; ● Clean Master (+100.000.000), Camera360 (+50.000.000), etc.
  • 63. public class MyActivity extends Activity { @Override public void onCreate() { super.onCreate(); // Criar configuração global e inicializa o ImageLoader ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) ... .build(); ImageLoader.getInstance().init(config); ... }}
  • 64. String imageUri = "http://site.com/image.png"; // da Web String imageUri = "file:///mnt/sdcard/image.png"; // do SD card String imageUri = "content://media/external/audio/albumart/1"; // de um content provider String imageUri = "assets://image.png"; // dos assets String imageUri = "drawable://" + R.drawable.img; // dos drawables (non-9patch images) // Carrega a imagem em uma ImageView imageLoader.displayImage(imageUri, imageView); // Carregar imagem, decodificá-lo para Bitmap e retorna o Bitmap pro callback imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // Faça o que quiser }});
  • 65. GreenDAO ● Framework open-source;
  • 66. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite;
  • 67. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples;
  • 68. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android;
  • 69. GreenDAO ● Framework open-source; ● Facilita a comunicação com SQLite; ● API simples; ● Otimizado para Android; ● Consumo mínimo de memória;
  • 70. 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);
  • 71. 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;
  • 72. 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.
  • 73. 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 Resultado... 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
  • 74. 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...
  • 75. DroidParts ● Injeção de Dependência para Views, Fragments, Services, qualquer coisa;
  • 76. DroidParts ● Injeção de Dependência para Views, Fragments, Services, qualquer coisa; ● ORM - Uso eficiente de persistência com Cursor e API fluente;
  • 77. DroidParts ● Injeção de Dependência para Views, Fragments, Services, qualquer coisa; ● ORM - Uso eficiente de persistência com Cursor e API fluente; ● EventBus para subscrever e postar eventos;
  • 78. DroidParts ● Injeção de Dependência para Views, Fragments, Services, qualquer coisa; ● ORM - Uso eficiente de persistência com Cursor e API fluente; ● EventBus para subscrever e postar eventos; ● Simples (des)serialização JSON capaz de lidar com objetos aninhados;
  • 79. DroidParts ● Injeção de Dependência para Views, Fragments, Services, qualquer coisa; ● ORM - Uso eficiente de persistência com Cursor e API fluente; ● EventBus para subscrever e postar eventos; ● Simples (des)serialização JSON capaz de lidar com objetos aninhados; ● Mesma coisa com XML;
  • 80. DroidParts ● Injeção de Dependência para Views, Fragments, Services, qualquer coisa; ● ORM - Uso eficiente de persistência com Cursor e API fluente; ● EventBus para subscrever e postar eventos; ● Simples (des)serialização JSON capaz de lidar com objetos aninhados; ● Mesma coisa com XML; ● Melhor forma de lidar com AsyncTask e IntentService com Exceções;
  • 81. DroidParts ● Logger que descobre sua TAG e registra qualquer objeto;
  • 82. DroidParts ● Logger que descobre sua TAG e registra qualquer objeto; ● RESTClient para GET, PUT, POST, DELETE & InputStream-getting, e também conversa com JSON;
  • 83. DroidParts ● Logger que descobre sua TAG e registra qualquer objeto; ● RESTClient para GET, PUT, POST, DELETE & InputStream-getting, e também conversa com JSON; ● ImageFetcher para anexar de forma assíncrona imagens para ImageViews, com caching, cross-fade e apoio transformação;
  • 84. DroidParts ● Logger que descobre sua TAG e registra qualquer objeto; ● RESTClient para GET, PUT, POST, DELETE & InputStream-getting, e também conversa com JSON; ● ImageFetcher para anexar de forma assíncrona imagens para ImageViews, com caching, cross-fade e apoio transformação; ● Muito mais...
  • 85. Robotium ● Framework para automação de testes;
  • 86. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial);
  • 87. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial); ● Suporta aplicações nativas e híbridas;
  • 88. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial); ● Suporta aplicações nativas e híbridas; ● Foco em testes de caixa preta;
  • 89. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial); ● Suporta aplicações nativas e híbridas; ● Foco em testes de caixa preta; ● Similar ao Selenium (aplicações web);
  • 90. Robotium ● Framework para automação de testes; ● Robotium Recorder (trial); ● Suporta aplicações nativas e híbridas; ● Foco em testes de caixa preta; ● Similar ao Selenium (aplicações web); ● Integração com Ant/Maven/Gradle para a execução dos testes na integração contínua.
  • 91. Genymotion ● Emulador Android alternativo;
  • 92. Genymotion ● Emulador Android alternativo; ● Rápido e intuitivo (fácil de usar);
  • 93. Genymotion ● Emulador Android alternativo; ● Rápido e intuitivo (fácil de usar); ● Utilizado por mais de 1.500.000 devs;
  • 94. Genymotion ● Emulador Android alternativo; ● Rápido e intuitivo (fácil de usar); ● Utilizado por mais de 1.500.000 devs; ● Possibilita controle total do AVD (bateria, GPS, acelerômetro, etc);
  • 95. Genymotion ● Emulador Android alternativo; ● Rápido e intuitivo (fácil de usar); ● Utilizado por mais de 1.500.000 devs; ● Possibilita controle total do AVD (bateria, GPS, acelerômetro, etc); ● Integra-se ao Eclipse através de um plugin;
  • 96. Genymotion ● Emulador Android alternativo; ● Rápido e intuitivo (fácil de usar); ● Utilizado por mais de 1.500.000 devs; ● Possibilita controle total do AVD (bateria, GPS, acelerômetro, etc); ● Integra-se ao Eclipse através de um plugin; ● Roda em Windows, MacOS e Linux.
  • 97.
  • 98.
  • 99.
  • 100. HAXM ● Acelera o funcionamento do emulador do Android para processadores Intel;
  • 101. HAXM ● Acelera o funcionamento do emulador do Android para processadores Intel; ● É necessário baixar a imagem x86 no Android SDK;
  • 102. HAXM ● Acelera o funcionamento do emulador do Android para processadores Intel; ● É necessário baixar a imagem x86 no Android SDK; ● Não tem suporte nativo para Google Play;
  • 103.
  • 104. Referências ● http://www.appbrain.com/stats/libraries/dev ● http://www.tutecentral.com/android-pull-to-refresh/ ● https://github.com/greenrobot/EventBus ● https://code.google.com/p/google-gson/ ● https://github.com/castorflex/SmoothProgres sBar ● http://sharedstate.net/archives/pull-to-refresh ● http://loopj.com/android-async-http/ ● http://viewpagerindicator.com/
  • 105. Referências ● https://github.com/nostra13/Android- Universal-Image-Loader ● https://github.com/excilys/androidannotation s ● http://androidkickstartr.com/ ● http://greendao-orm.com/ ● https://software.intel.com/pt-br/android ● http://www.genymotion.com/ ● https://code.google.com/p/robotium/
  • 106. Referências ● http://blog.globalcode.com.br/2012/02/json-facil- em-java-com-gson.html ● http://pt.slideshare.net/Infinum/infinum-android- talks-02-eventbus ● http://droidparts.org/ ● https://software.intel.com/en-us/ android/articles/intel-hardware-accelerated- execution-manager
  • 107. Obrigado! @ricardolonga http://about.me/ricardo.longa ricardo.longa@gmail.com @driflash http://www.creativedev.com.br contato@creativedev.com.br