Android Service Patterns
-
Upload
shree-kumar -
Category
Technology
-
view
3.215 -
download
0
Transcript of Android Service Patterns
Android Service Patterns AIDL Services Aren’t That Hard…
Shree Kumar InnoMinds Software
Motivation • Writing services is useful & fun
– Not to mention, painful ! • Documentation is present, but…
– Scattered – Deals mostly with mechanics
• Can a 45 minute session make a difference ? Android Service Patterns | DroidCon India 2011
Objectives • Clarification on the term “Patterns”
– NOT design patterns a-la Grady Booch! • This talk gives you
– Quick overview of AIDL based Services – Features & Pains – Writing useful services as patterns
Android Service Patterns | DroidCon India 2011
Intro to Android Services • The “Service” concept
– Application component – Typically used for long-running operations – Does not automatically create
• new processes or threads • Can be roughly classified based on
– Interaction Mechanism : Started, Bound – Application Boundaries : In-process, IPC
Android Service Patterns | DroidCon India 2011
AIDL based IPC Services • Android Interface Definition Language • Inter-Process Communication to
– Expose interfaces to other applications • More complicated than “Messenger”
Android Service Patterns | DroidCon India 2011
Why all the pain? • “natural” interactions with the service
– Calls & callbacks – With complex objects as parameters
• And all these across process boundaries!
Android Service Patterns | DroidCon India 2011
Hello, AIDL Service! • Implements onBind()
– Exposes interface by implementing stubs • Exports via AndroidManifest.xml • Client apps bind via Intents
– Use interface methods – Callbacks require app to implement stubs
corresponding to callback interface Android Service Patterns | DroidCon India 2011
What’s not-so-nice there ? • No control over binding
– onBind() return value is cached! • No control over threading • Code messier than in-process interface
– No support for exceptions – Dead remote object exceptions => messy code – Callbacks not invoked in UI context
• No concept of versioning
Android Service Patterns | DroidCon India 2011
Common Service Patterns • Exclusive access to shared resource
– The “lock” pattern • Simultaneous access to shared resource
– “serialize”, “broadcast” patterns • Less common
– Service versioning – Multiple objects of the same type
Android Service Patterns | DroidCon India 2011
The “lock” pattern • Exclusive access using “locks”
– Take lock before use – Release lock after use
• Looks simple ? – Multi-app access – Appropriate threading model – Improper app lock handling => starvation
Android Service Patterns | DroidCon India 2011
Locked Service Implementation • Associate locks with calling process • Worker thread for serialization
– Started on service creation – Producer-consumer modeling
• Java.util.concurrent provides ample support • Partial solution for starvation
– Evict clients on DeadObjectException Android Service Patterns | DroidCon India 2011
Shared Access Service • “broadcast” method
– Shares a state update with multiple listeners – Broadcast receivers don’t make the cut
• Can’t bind a Service inside them • Implementation
– Reuse “listener” concept • Clients add/remove listeners
– Service maintains list of listeners • Updates listeners when needed • Removes dead objects
– Reference : MindTheRobot Android Architecture Tutorial
Android Service Patterns | DroidCon India 2011
Questions ? Shree Kumar
[email protected] http:://www.shreekumar.in/