SlideShare a Scribd company logo
Android: a full-stack to
consume a REST API
Romain Rochegude
2016.09.30
1
Introduction
2
Introduction
• Well-known concerns:
• Communicate with remote API
• Parse content and deal with it
• Do it asynchronously
• Notify components of job termination
3
REST client: Retrofit
4
REST client: Retrofit
• Well-known, documented, “must-have” Android
library
• Write a Java interface to declare API method
• Annotations to describe the HTTP request
• HTTP method (@GET, @POST, etc.)
• URL parameter (@Path)
• query parameter (@Query, @QueryMap)
• request body (@Body)
• multipart request body (@Multipart, @Part)
• form management (@FormUrlEncoded, @Field)
• headers management (@Headers)
5
public interface GitHubService {
@GET("/users/{user}/repos")
Call<List<DTORepo>> listRepos(
@Path("user") String user);
}
6
• Build an implementation at runtime
Retrofit retrofit = new
Retrofit.Builder()
.baseUrl("https://api.github.com")
.build();
GitHubService service =
retrofit.create(GitHubService.class);
7
• Simple calls
Call<List<DTORepo>> repos =
service.listRepos("RoRoche");
• Converters to (de)serialize HTTP bodies
Retrofit retrofit = new
Retrofit.Builder()
//...
.addConverterFactory(
GsonConverterFactory.create())
.build();
8
• To add a new HTTP request:
• declare DTO class(es) with your parsing strategy
• declare body class (optional)
• declare the method in Java interface with suitable
annotations
• Minimum amount of code to deal with remote
API
9
JSON parser: LoganSquare
10
JSON parser: LoganSquare
• Faster, according to BlueLine Labs benchmark
• Clear annotations
@JsonObject
public class DTORepo {
@JsonField(name = "id")
public Integer id;
@JsonField(name = "name")
public String name;
}
11
• Simple parsing methods
// Parse from an InputStream
InputStream is = //...
Image image = LoganSquare.parse(is,
Image.class);
// Parse from a String
String json = //...
Image image = LoganSquare.parse(json,
Image.class);
12
• Simple serializing methods
// Serialize it to an OutputStream
OutputStream os = //...
LoganSquare.serialize(image, os);
// Serialize it to a String
String json =
LoganSquare.serialize(image);
13
• Available retrofit converter
Retrofit retrofit = new
Retrofit.Builder()
//...
.addConverterFactory(
LoganSquareConverterFactory.create())
.build();
14
• Small library
• Supports custom types
• Compile-time
15
Async management: Android
Priority Job Queue (Job
Manager)
16
Async management: Android Priority Job
Queue (Job Manager)
• Job queue to easily schedule background tasks
• Inspired by a Google I/O 2010 talk on REST
client applications
• Easy to declare a new tasks (extends Job) and
configure it
17
public class PostTweetJob extends Job {
public static int PRIORITY = 1;
private String mText;
public PostTweetJob(String text) {
super(new Params(PRIORITY)
.requireNetwork()
.persist());
mText = text:
}
//...
}
18
public class PostTweetJob extends Job {
//...
@Override
public void onAdded() {
}
@Override
public void onRun() throws Throwable
{
webservice.postTweet(mText);
}
//...
}
19
• Job manager configuration
Configuration configuration =
new Configuration.Builder(poContext)
.minConsumerCount(1)
.maxConsumerCount(3)
.loadFactor(3) // 3 jobs per
consumer
.consumerKeepAlive(120)
.build();
JobManager jobManager =
new JobManager(context,
configuration); 20
• Simple way to create and enqueue a task
PostTweetJob postTweetJob =
new PostTweetJob("test");
jobManager
.addJobInBackground(postTweetJob);
21
Result propagation: EventBus
22
Result propagation: EventBus
• Based on the publisher/subscriber pattern
(loose coupling)
• Communication between application
components
• Small library
• Thread delivery
• Convenient Annotation based API
23
Set-up
• Create an event class
public class EventQueryDidFinish
• Register your subscriber. . .
eventBus.register(this);
• . . . and unregister if needed:
eventBus.unregister(this);
24
• Declare subscribing method
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventQueryDidFinish(
EventQueryDidFinish event) {
//...
}
• Post event
EventQueryDidFinish event = //...
eventBus.post(event);
25
Conclusion
26
Conclusion
• Highly based on Java annotations
• Write less code
• Multiple ways to configure it
• Focused on performance and UX consistency
27

More Related Content

Similar to Android: a full-stack to consume a REST API

Spring 4 Web App
Spring 4 Web AppSpring 4 Web App
Spring 4 Web App
Rossen Stoyanchev
 
Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss
Andres Almiray
 
Android application architecture
Android application architectureAndroid application architecture
Android application architecture
Romain Rochegude
 
Drools & jBPM future roadmap talk
Drools & jBPM future roadmap talkDrools & jBPM future roadmap talk
Drools & jBPM future roadmap talk
Mark Proctor
 
Android Libs - Retrofit
Android Libs - RetrofitAndroid Libs - Retrofit
Android Libs - Retrofit
Daniel Costa Gimenes
 
Module design pattern i.e. express js
Module design pattern i.e. express jsModule design pattern i.e. express js
Module design pattern i.e. express js
Ahmed Assaf
 
Webinar about Spring Data Neo4j 4
Webinar about Spring Data Neo4j 4Webinar about Spring Data Neo4j 4
Webinar about Spring Data Neo4j 4
GraphAware
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Mark Proctor
 
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays
 
Mail OnLine Android Application at DroidCon - Turin - Italy
Mail OnLine Android Application at DroidCon - Turin - ItalyMail OnLine Android Application at DroidCon - Turin - Italy
Mail OnLine Android Application at DroidCon - Turin - Italy
Yahoo
 
Petro Gordiievych "From Java 9 to Java 12"
Petro Gordiievych "From Java 9 to Java 12"Petro Gordiievych "From Java 9 to Java 12"
Petro Gordiievych "From Java 9 to Java 12"
LogeekNightUkraine
 
Modern Android Development - Epoxy
Modern Android Development - EpoxyModern Android Development - Epoxy
Modern Android Development - Epoxy
Tobias Schürg
 
Exploring Relay land
Exploring Relay landExploring Relay land
Exploring Relay land
Stefano Masini
 
Sprint 78
Sprint 78Sprint 78
Sprint 78
ManageIQ
 
Sharding and Load Balancing in Scala - Twitter's Finagle
Sharding and Load Balancing in Scala - Twitter's FinagleSharding and Load Balancing in Scala - Twitter's Finagle
Sharding and Load Balancing in Scala - Twitter's Finagle
Geoff Ballinger
 
Arquitecturas de microservicios - Medianet Software
Arquitecturas de microservicios   -  Medianet SoftwareArquitecturas de microservicios   -  Medianet Software
Arquitecturas de microservicios - Medianet Software
Ernesto Hernández Rodríguez
 
iOS Swift application architecture
iOS Swift application architectureiOS Swift application architecture
iOS Swift application architecture
Romain Rochegude
 
Test-Driven Documentation for your REST(ful) service
Test-Driven Documentation for your REST(ful) serviceTest-Driven Documentation for your REST(ful) service
Test-Driven Documentation for your REST(ful) service
Jeroen Reijn
 
RESTful application with JAX-RS and how to expose and test them
RESTful application with JAX-RS and how to expose and test themRESTful application with JAX-RS and how to expose and test them
RESTful application with JAX-RS and how to expose and test them
Kumaraswamy M
 

Similar to Android: a full-stack to consume a REST API (20)

Spring 4 Web App
Spring 4 Web AppSpring 4 Web App
Spring 4 Web App
 
Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss Java Libraries You Can’t Afford to Miss
Java Libraries You Can’t Afford to Miss
 
Android application architecture
Android application architectureAndroid application architecture
Android application architecture
 
Drools & jBPM future roadmap talk
Drools & jBPM future roadmap talkDrools & jBPM future roadmap talk
Drools & jBPM future roadmap talk
 
Android Libs - Retrofit
Android Libs - RetrofitAndroid Libs - Retrofit
Android Libs - Retrofit
 
Module design pattern i.e. express js
Module design pattern i.e. express jsModule design pattern i.e. express js
Module design pattern i.e. express js
 
Webinar about Spring Data Neo4j 4
Webinar about Spring Data Neo4j 4Webinar about Spring Data Neo4j 4
Webinar about Spring Data Neo4j 4
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
 
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
 
Mail OnLine Android Application at DroidCon - Turin - Italy
Mail OnLine Android Application at DroidCon - Turin - ItalyMail OnLine Android Application at DroidCon - Turin - Italy
Mail OnLine Android Application at DroidCon - Turin - Italy
 
Petro Gordiievych "From Java 9 to Java 12"
Petro Gordiievych "From Java 9 to Java 12"Petro Gordiievych "From Java 9 to Java 12"
Petro Gordiievych "From Java 9 to Java 12"
 
Modern Android Development - Epoxy
Modern Android Development - EpoxyModern Android Development - Epoxy
Modern Android Development - Epoxy
 
Exploring Relay land
Exploring Relay landExploring Relay land
Exploring Relay land
 
Sprint 78
Sprint 78Sprint 78
Sprint 78
 
Sharding and Load Balancing in Scala - Twitter's Finagle
Sharding and Load Balancing in Scala - Twitter's FinagleSharding and Load Balancing in Scala - Twitter's Finagle
Sharding and Load Balancing in Scala - Twitter's Finagle
 
Arquitecturas de microservicios - Medianet Software
Arquitecturas de microservicios   -  Medianet SoftwareArquitecturas de microservicios   -  Medianet Software
Arquitecturas de microservicios - Medianet Software
 
iOS Swift application architecture
iOS Swift application architectureiOS Swift application architecture
iOS Swift application architecture
 
Test-Driven Documentation for your REST(ful) service
Test-Driven Documentation for your REST(ful) serviceTest-Driven Documentation for your REST(ful) service
Test-Driven Documentation for your REST(ful) service
 
RESTful application with JAX-RS and how to expose and test them
RESTful application with JAX-RS and how to expose and test themRESTful application with JAX-RS and how to expose and test them
RESTful application with JAX-RS and how to expose and test them
 
Rest with Spring
Rest with SpringRest with Spring
Rest with Spring
 

Recently uploaded

Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
Srikant77
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 

Recently uploaded (20)

Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 

Android: a full-stack to consume a REST API

  • 1. Android: a full-stack to consume a REST API Romain Rochegude 2016.09.30 1
  • 3. Introduction • Well-known concerns: • Communicate with remote API • Parse content and deal with it • Do it asynchronously • Notify components of job termination 3
  • 5. REST client: Retrofit • Well-known, documented, “must-have” Android library • Write a Java interface to declare API method • Annotations to describe the HTTP request • HTTP method (@GET, @POST, etc.) • URL parameter (@Path) • query parameter (@Query, @QueryMap) • request body (@Body) • multipart request body (@Multipart, @Part) • form management (@FormUrlEncoded, @Field) • headers management (@Headers) 5
  • 6. public interface GitHubService { @GET("/users/{user}/repos") Call<List<DTORepo>> listRepos( @Path("user") String user); } 6
  • 7. • Build an implementation at runtime Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") .build(); GitHubService service = retrofit.create(GitHubService.class); 7
  • 8. • Simple calls Call<List<DTORepo>> repos = service.listRepos("RoRoche"); • Converters to (de)serialize HTTP bodies Retrofit retrofit = new Retrofit.Builder() //... .addConverterFactory( GsonConverterFactory.create()) .build(); 8
  • 9. • To add a new HTTP request: • declare DTO class(es) with your parsing strategy • declare body class (optional) • declare the method in Java interface with suitable annotations • Minimum amount of code to deal with remote API 9
  • 11. JSON parser: LoganSquare • Faster, according to BlueLine Labs benchmark • Clear annotations @JsonObject public class DTORepo { @JsonField(name = "id") public Integer id; @JsonField(name = "name") public String name; } 11
  • 12. • Simple parsing methods // Parse from an InputStream InputStream is = //... Image image = LoganSquare.parse(is, Image.class); // Parse from a String String json = //... Image image = LoganSquare.parse(json, Image.class); 12
  • 13. • Simple serializing methods // Serialize it to an OutputStream OutputStream os = //... LoganSquare.serialize(image, os); // Serialize it to a String String json = LoganSquare.serialize(image); 13
  • 14. • Available retrofit converter Retrofit retrofit = new Retrofit.Builder() //... .addConverterFactory( LoganSquareConverterFactory.create()) .build(); 14
  • 15. • Small library • Supports custom types • Compile-time 15
  • 16. Async management: Android Priority Job Queue (Job Manager) 16
  • 17. Async management: Android Priority Job Queue (Job Manager) • Job queue to easily schedule background tasks • Inspired by a Google I/O 2010 talk on REST client applications • Easy to declare a new tasks (extends Job) and configure it 17
  • 18. public class PostTweetJob extends Job { public static int PRIORITY = 1; private String mText; public PostTweetJob(String text) { super(new Params(PRIORITY) .requireNetwork() .persist()); mText = text: } //... } 18
  • 19. public class PostTweetJob extends Job { //... @Override public void onAdded() { } @Override public void onRun() throws Throwable { webservice.postTweet(mText); } //... } 19
  • 20. • Job manager configuration Configuration configuration = new Configuration.Builder(poContext) .minConsumerCount(1) .maxConsumerCount(3) .loadFactor(3) // 3 jobs per consumer .consumerKeepAlive(120) .build(); JobManager jobManager = new JobManager(context, configuration); 20
  • 21. • Simple way to create and enqueue a task PostTweetJob postTweetJob = new PostTweetJob("test"); jobManager .addJobInBackground(postTweetJob); 21
  • 23. Result propagation: EventBus • Based on the publisher/subscriber pattern (loose coupling) • Communication between application components • Small library • Thread delivery • Convenient Annotation based API 23
  • 24. Set-up • Create an event class public class EventQueryDidFinish • Register your subscriber. . . eventBus.register(this); • . . . and unregister if needed: eventBus.unregister(this); 24
  • 25. • Declare subscribing method @Subscribe(threadMode = ThreadMode.MAIN) public void onEventQueryDidFinish( EventQueryDidFinish event) { //... } • Post event EventQueryDidFinish event = //... eventBus.post(event); 25
  • 27. Conclusion • Highly based on Java annotations • Write less code • Multiple ways to configure it • Focused on performance and UX consistency 27