schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4...
Transcript of schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4...
![Page 1: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/1.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Introduction
![Page 2: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/2.jpg)
Android Services & Local IPC Douglas C. Schmidt
2
• Services don’t have a visual user interface & often run in the background in a separate background thread or process
Introduction
downloadImage()
DownloadService
LocalBinder
Background Process
![Page 3: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/3.jpg)
Android Services & Local IPC Douglas C. Schmidt
3
• Services don’t have a visual user interface & often run in the background in a separate background thread or process • Activities use Services to perform long-running operations or access remote
resources on behalf of users
Introduction
DownloadActivity
mBoundService
Main Process
downloadImage()
DownloadService
LocalBinder
Background Process
![Page 4: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/4.jpg)
Android Services & Local IPC Douglas C. Schmidt
4
• Services don’t have a visual user interface & often run in the background in a separate background thread or process
• Activities & Services interact via IPC mechanisms that are optimized for inter-process communication within a mobile device • e.g., the Android Interface Definition Language (AIDL) & Binder framework
Introduction
Binder IPC Mechanism
1: Call method downloadImage()
2: Return results to caller
DownloadActivity
mBoundService downloadImage()
DownloadService
Background Process
LocalBinder
Main Process
![Page 5: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/5.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Overview of Services
![Page 6: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/6.jpg)
Android Services & Local IPC Douglas C. Schmidt
6
Learning Objectives in this Part of the Module • Understand what a Service is &
what different types of Services Android supports
![Page 7: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/7.jpg)
Android Services & Local IPC Douglas C. Schmidt
7
• A Service is an Android component that can perform long-running operations in the background • e.g., a service might handle e-
commerce transactions, play music, download a file, interact with a content provider, run tasks periodically, etc.
developer.android.com/guide/components/services.html has more info
Overview of a Service
Download Service
![Page 8: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/8.jpg)
Android Services & Local IPC Douglas C. Schmidt
8
• A Service is an Android component that can perform long-running operations in the background
• Another Android component can start a Service • It will continue to run in the
background even if the user switches to another app/activity
Overview of a Service
A Service does not provide direct access to the user interface
Download Service
Download Activity
![Page 9: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/9.jpg)
Android Services & Local IPC Douglas C. Schmidt
9
• A Service is an Android component that can perform long-running operations in the background
• Another Android component can start a service
• There are two types of Services • Started Service – Often performs a
single operation & might not return a result to the caller directly
Overview of a Service
Download Service Download Service
Download Activity
![Page 10: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/10.jpg)
Android Services & Local IPC Douglas C. Schmidt
10
Overview of a Service
Download Service
Download Activity
• A Service is an Android component that can perform long-running operations in the background
• Another Android component can start a service
• There are two types of Services • Started Service – Often performs a
single operation & might not return a result to the caller directly
• Bound Service – Provides a client- server interface that allows for a conversation with the Service
![Page 11: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/11.jpg)
Android Services & Local IPC Douglas C. Schmidt
11
• Implementing a Service is similar to implementing an Activity • e.g., inherit from Android Service
class, override lifecycle methods, include Service in the config file AndroidManifest.xml, etc.
Implementing a Service public class Service extends ... { public void onCreate(); public int onStartCommand (Intent intent, int flags, int startId); public abstract IBinder onBind(Intent intent); public boolean onUnbind(Intent intent); protected void onDestroy(); ... }
![Page 12: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/12.jpg)
Android Services & Local IPC Douglas C. Schmidt
12
• Implementing a Service is similar to implementing an Activity
• Android communicates state changes to a Service by calling its lifecycle hook methods
Implementing a Service
![Page 13: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/13.jpg)
Android Services & Local IPC Douglas C. Schmidt
13
• Implementing a Service is similar to implementing an Activity
• Android communicates state changes to a Service by calling its lifecycle hook methods
Implementing a Service
• Commonality: Provides common interface for performing long-running operations that don’t interact directly with the user interface
• Variability: Subclasses can override lifecycle hook methods to perform necessary initialization for Started & Bound Services
![Page 14: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/14.jpg)
Android Services & Local IPC Douglas C. Schmidt
14
• Services lifecycle methods include • onCreate() – called when Service
process is created, by any means
Service Lifecycle Hook Methods
![Page 15: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/15.jpg)
Android Services & Local IPC Douglas C. Schmidt
15
• Services lifecycle methods include • onCreate() – called when Service
process is created, by any means • onStartCommand() – called each
time a Started Service is sent a command via startService()
Service Lifecycle Hook Methods
![Page 16: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/16.jpg)
Android Services & Local IPC Douglas C. Schmidt
16
• Services lifecycle methods include • onCreate() – called when Service
process is created, by any means • onStartCommand() – called each
time a Started Service is sent a command via startService()
• onBind()/onUnbind – called when a client binds/unbinds to a Bound Service via bindService()/ unBindService()
Service Lifecycle Hook Methods
![Page 17: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/17.jpg)
Android Services & Local IPC Douglas C. Schmidt
17
• Services lifecycle methods include • onCreate() – called when Service
process is created, by any means • onStartCommand() – called each
time a Started Service is sent a command via startService()
• onBind()/onUnbind – called when a client binds/unbinds to a Bound Service via bindService()/ unBindService()
• onDestroy() – called as Service is being shut down to cleanup resources
Service Lifecycle Hook Methods
![Page 18: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/18.jpg)
Android Services & Local IPC Douglas C. Schmidt
18
Configuring a Service into the Android System
<service android:name="com.android.music.MediaPlaybackService" android:exported="false"/>
Music Service
• You need to add a Service to your AndroidManifest.xml file • Add a <service> element as a child of the <application> element &
provide android:name to reference your Service class
Services do not automatically run in their own processes or threads
MediaPlayback Service Music Activity
Main Process
![Page 19: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/19.jpg)
Android Services & Local IPC Douglas C. Schmidt
19
• You need to add a Service to your AndroidManifest.xml file • Add a <service> element as a child of the <application> element &
provide android:name to reference your Service class • Use android:process=":myProcess" to run the service in its own process
Configuring a Service into the Android System
<service android:name="com.android.music.MediaPlaybackService" android:exported="false" android:process=":myProcess"/>
Music Service
MediaPlayback Service
Music Activity Background Process
Main Process
developer.android.com/guide/topics/manifest/service-element.html#proc
![Page 20: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/20.jpg)
Android Services & Local IPC Douglas C. Schmidt
20
Summary • Apps can use Services to implement long-
running operations in the background • Unless otherwise specified, a Service
runs in the same process/thread as the app it is part of
Download Service
Main Process
Download Activity
![Page 21: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/21.jpg)
Android Services & Local IPC Douglas C. Schmidt
21
Summary • Apps can use Services to implement long-
running operations in the background • Unless otherwise specified, a Service
runs in the same process/thread as the app it is part of
• It keeps running until stopped by itself, stopped by user, or killed by the system if it needs memory
Download Service
Main Process
Download Activity
![Page 22: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/22.jpg)
Android Services & Local IPC Douglas C. Schmidt
22
Summary • Apps can use Services to implement long-
running operations in the background • You can configure many properties of
Services via an AndroidManifest.xml file Download Service
Download Activity
Main Process
Background Process
developer.android.com/guide/topics/manifest/service-element.html has more
<service android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:isolatedProcess=["true" | "false"] android:label="string resource" android:name="string" android:permission="string" android:process="string" > ... </service>
![Page 23: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/23.jpg)
Android Services & Local IPC Douglas C. Schmidt
23
Summary • Apps can use Services to implement long-
running operations in the background • You can configure many properties of
Services via an AndroidManifest.xml file • Android calls back on hook methods to
control Service processing
![Page 24: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/24.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Overview of Communicating with Services
![Page 25: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/25.jpg)
Android Services & Local IPC Douglas C. Schmidt
25
Learning Objectives in this Part of the Module • Understand various local IPC mechanisms that Activities & Services use to
communicate
DownloadActivity
Main Process
DownloadService
Background Process
![Page 26: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/26.jpg)
Android Services & Local IPC Douglas C. Schmidt
26
Learning Objectives in this Part of the Module • Understand various local IPC mechanisms that Activities & Services use to
communicate
• Recognize the common patterns used to implement communication with Services
![Page 27: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/27.jpg)
Android Services & Local IPC Douglas C. Schmidt
27
Communicating to Services
• Activities have two general ways to communicate with a Service • Send a command via startService()
• You can add “extras” to the Intent used to start a Service
DownloadActivity
Main Process
DownloadService
Background Process
![Page 28: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/28.jpg)
Android Services & Local IPC Douglas C. Schmidt
28
Communicating to Services
• Activities have two general ways to communicate with a Service • Send a command via startService() • Bind to a Service via BindService() & then use the Binder RPC mechanism
• The Binder supports an object-oriented client/server model defined via the Android Interface Definition Language (AIDL) or Messengers
DownloadActivity
Main Process
DownloadService
Background Process
![Page 29: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/29.jpg)
Android Services & Local IPC Douglas C. Schmidt
29
Communicating to Services
• Activities have two general ways to communicate with a Service • Send a command via startService() • Bind to a Service via BindService() & then use the Binder RPC mechanism
• The Binder supports an object-oriented client/server model defined via the Android Interface Definition Language (AIDL) or Messengers
• Inter- or intra-process semantics selected by AndroidManifest.xml settings
DownloadActivity
Main Process
DownloadService
Background Process
![Page 30: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/30.jpg)
Android Services & Local IPC Douglas C. Schmidt
30
Communicating from Services
• Services have multiple ways to communicate back to an invoking Activity • Use a Messenger object
• This object can send messages to an Activity’s Handler
DownloadActivity
Main Process
DownloadService
Background Process
![Page 31: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/31.jpg)
Android Services & Local IPC Douglas C. Schmidt
31
Communicating from Services
• Services have multiple ways to communicate back to an invoking Activity • Use a Messenger object • Use Broadcast Intents
• This requires having the Activity register a BroadcastReceiver
DownloadActivity
Main Process
DownloadService
Background Process
![Page 32: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/32.jpg)
Android Services & Local IPC Douglas C. Schmidt
32
Communicating from Services
• Services have multiple ways to communicate back to an invoking Activity • Use a Messenger object • Use Broadcast Intents • Use a Pending Intent
• Using a PendingIntent to trigger a call to Activity’s onActivityResult() method
DownloadActivity
Main Process
DownloadService
Background Process
![Page 33: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/33.jpg)
Android Services & Local IPC Douglas C. Schmidt
33
Communicating from Services
• Services have multiple ways to communicate back to an invoking Activity • Use a Messenger object • Use Broadcast Intents • Use a Pending Intent • Use an AIDL-based callback object
• Invoke callback on an AIDL-based object passed to Service via the Binder
DownloadActivity
Main Process
DownloadService
Background Process
![Page 34: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/34.jpg)
Android Services & Local IPC Douglas C. Schmidt
34 www.dre.vanderbilt.edu/~schmidt/PDF/Activator.pdf has more info
Common Service Communication Patterns • Several patterns are used to implement communication with Services
• Activator – Automate the scalable on-demand activation & deactivation of service execution contexts to run services accessed by many clients without consuming resources unnecessarily
![Page 35: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/35.jpg)
Android Services & Local IPC Douglas C. Schmidt
35
Common Service Communication Patterns • Services implement several patterns
• Activator • Command Processor – Encapsulate
the request for a service as a command object
www.dre.vanderbilt.edu/~schmidt/PDF/CommandProcessor.pdf has more info
Client
3
2 Queue request
![Page 36: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/36.jpg)
Android Services & Local IPC Douglas C. Schmidt
36
Common Service Communication Patterns • Services implement several patterns
• Activator • Command Processor • Proxy – Provide a surrogate or placeholder
for another object to control access to it
www.dre.vanderbilt.edu/~schmidt/PDF/CommandProcessor.pdf has more info
![Page 37: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/37.jpg)
Android Services & Local IPC Douglas C. Schmidt
37
Common Service Communication Patterns • Services implement several patterns
• Activator • Command Processor • Proxy – Provide a surrogate or placeholder
for another object to control access to it
See en.wikipedia.org/wiki/Proxy_pattern for more on Proxy pattern
![Page 38: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/38.jpg)
Android Services & Local IPC Douglas C. Schmidt
38
Object Adapter
Common Service Communication Patterns • Services implement several patterns
• Activator • Command Processor • Proxy • Broker – Connect clients with remote objects by
mediating invocations from clients to remote objects, while encapsulating the details of IPC or network communication
See www.kircher-schwanninger.de/michael/publications/BrokerRevisited.pdf
![Page 39: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/39.jpg)
Android Services & Local IPC Douglas C. Schmidt
39
Summary • There are multiple mechanisms for Activities to communicate with Services
![Page 40: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/40.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Overview of Started Services
![Page 41: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/41.jpg)
Android Services & Local IPC Douglas C. Schmidt
41
Learning Objectives in this Part of the Module • Understand how what a Started
Service is & what hook methods it defines to manage its various lifecycle states
We’ll emphasize commonalities & variabilities in our discussion
![Page 42: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/42.jpg)
Android Services & Local IPC Douglas C. Schmidt
42
Overview of Started Services • A Started Service is one that a client component starts
by calling startService() • The Intent identifies the Service to communicate with
& supplies parameters (via Intent extras) to tell the Service what to do
Intent intent = new Intent (this, ThreadedDownloadService.class)); intent.putExtra("URL", imageUrl); startService(intent);
This call doesn’t block
Download Service
Download Activity
developer.android.com/guide/components/services.html#CreatingStartedService
![Page 43: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/43.jpg)
Android Services & Local IPC Douglas C. Schmidt
43
Overview of Started Services • A Started Service is one that a client component starts
by calling startService() • This results in a call to the Service’s onCreate() &
onStartCommand() hook methods • If the Service is not already running it will be started
& will receive the Intent via onStartCommand()
public class DownloadService extends Service { int onStartCommand(Intent intent, int flags, int startId) { ... }
Download Service
Download Activity
![Page 44: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/44.jpg)
Android Services & Local IPC Douglas C. Schmidt
44
Overview of Started Services • A Started Service is one that a client component starts
by calling startService() • This results in a call to the Service’s onCreate() &
onStartCommand() hook methods • If the Service is not already running it will be started
& will receive the Intent via onStartCommand() • This return a result to Android, but not to client
public class DownloadService extends Service { int onStartCommand(Intent intent, int flags, int startId) { return ...; }
Download Service
Download Activity
![Page 45: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/45.jpg)
Android Services & Local IPC Douglas C. Schmidt
45
Overview of Started Services • A Started Service is one that a client component starts
by calling startService() • This results in a call to the Service’s onCreate() &
onStartCommand() hook methods • If the Service is not already running it will be started
& will receive the Intent via onStartCommand() • This return a result to Android, but not to client
public class DownloadService extends Service { int onStartCommand(Intent intent, int flags, int startId) { return ...; }
Download Service
Download Activity
android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html
Return value tells Android what it should do with the service if its process is killed while it is running • START_STICKY – Don’t redeliver Intent to onStartCommand() (pass null intent) • START_NOT_STICKY – Service should remain stopped until/unless explicitly started
by some client code • START_REDELIVER_INTENT – Restart Service via onStartCommand(), supplying the
same Intent as was delivered this time
![Page 46: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/46.jpg)
Android Services & Local IPC Douglas C. Schmidt
46
• A Started Service is one that another component starts by calling startService()
• This results in a call to the Service’s onCreate() & onStartCommand() hook methods
• A started service often performs a single operation & might not return a result to the caller • e.g., it could download or upload a file over TCP
Overview of Started Services
public class DownloadService ... String downloadFile (Uri uri) { InputStream in = (InputStream) new URL(uri.toString()).getContent(); ...
Download Service
Download Activity
![Page 47: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/47.jpg)
Android Services & Local IPC Douglas C. Schmidt
47
• A Started Service is one that another component starts by calling startService()
• This results in a call to the Service’s onCreate() & onStartCommand() hook methods
• A started service often performs a single operation & might not return a result to the caller
• When the operation is done, the service can be stopped
Overview of Started Services
A service can stop itself when it’s done by calling stopSelf() or another component
can stop it by calling stopService()
Download Service
Download Activity
![Page 48: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/48.jpg)
Android Services & Local IPC Douglas C. Schmidt
48
• A Started Service is one that another component starts by calling startService()
• This results in a call to the Service’s onCreate() & onStartCommand() hook methods
• A started service often performs a single operation & might not return a result to the caller
• When the operation is done, the service can be stopped • Examples of Android Started Services
• SMS & MMS Services • Manage messaging operations, such as sending
data, text, & pdu messages • AlertService
• Handle calendar event reminders
Overview of Started Services
See packages/apps in Android source code for many services
![Page 49: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/49.jpg)
Android Services & Local IPC Douglas C. Schmidt
49
Summary • When a Started Service is launched,
it has a lifecycle that's independent of the component that started it
Download Service
Download Activity
![Page 50: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/50.jpg)
Android Services & Local IPC Douglas C. Schmidt
50
Summary • When a Started Service is launched,
it has a lifecycle that's independent of the component that started it • The service can run in the
background indefinitely, even if the component that started it is destroyed
Download Service
Download Activity
![Page 51: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/51.jpg)
Android Services & Local IPC Douglas C. Schmidt
51
Summary • When a Started Service is launched,
it has a lifecycle that's independent of the component that started it
• Android’s Started Services support inversion of control
![Page 52: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/52.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Programming Started Services
![Page 53: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/53.jpg)
Android Services & Local IPC Douglas C. Schmidt
53
Learning Objectives in this Part of the Module • Understand how to program Started Services
![Page 54: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/54.jpg)
Android Services & Local IPC Douglas C. Schmidt
54
• Implementing a Started Service is similar to implementing an Activity, e.g.: • Inherit from Android Service
class
Programming a Started Service public class MusicService extends Service { public void onCreate() { ... } public int onStartCommand (Intent intent, int flags, int startId) { ... } protected void onDestroy() { ... } public IBinder onBind(Intent intent) { return null; } ... }
![Page 55: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/55.jpg)
Android Services & Local IPC Douglas C. Schmidt
55
• Implementing a Started Service is similar to implementing an Activity, e.g.: • Inherit from Android Service
class • Override lifecycle methods
Programming a Started Service public class MusicService extends Service { public void onCreate() { ... } public int onStartCommand (Intent intent, int flags, int startId) { ... } protected void onDestroy() { ... } public IBinder onBind(Intent intent) { return null; } ... }
May need to implement the concurrency model in
onStartCommand()
![Page 56: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/56.jpg)
Android Services & Local IPC Douglas C. Schmidt
56
• Implementing a Started Service is similar to implementing an Activity, e.g.: • Inherit from Android Service
class • Override lifecycle methods
• The onBind() method & onUnbind() aren’t used for Started Services
Programming a Started Service public class MusicService extends Service { public void onCreate() { ... } public int onStartCommand (Intent intent, int flags, int startId) { ... } protected void onDestroy() { ... } public IBinder onBind(Intent intent) { return null; } ... }
Started Services need to provide a no-op implementation for onBind()
![Page 57: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/57.jpg)
Android Services & Local IPC Douglas C. Schmidt
57
• Implementing a Started Service is similar to implementing an Activity, e.g.: • Inherit from Android Service
class • Override lifecycle methods • Include the Service in the
AndroidManifest.xml config file
Programming a Started Service <application ... > <activity android:name= ".MusicActivity" ...
</activity> <service android:exported="false" android:name= ".BGLoggingService“ ... </service>
</application
www.vogella.com/articles/AndroidServices/article.html has more on Services
![Page 58: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/58.jpg)
Android Services & Local IPC Douglas C. Schmidt
58
Music Player App Overview • MusicActivity can play music via a
Started Service
![Page 59: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/59.jpg)
Android Services & Local IPC Douglas C. Schmidt
59
Music Player App Overview • MusicActivity can play music via a
Started Service • To start the Service a user needs
to push the “Play” button
![Page 60: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/60.jpg)
Android Services & Local IPC Douglas C. Schmidt
60
Music Player App Overview • MusicActivity can play music via a
Started Service • To start the Service a user needs
to push the “Play” button • If music is playing when MusicActivity
leaves the foreground, the Music Service will continue playing
![Page 61: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/61.jpg)
Android Services & Local IPC Douglas C. Schmidt
61
Music Player App Overview • MusicActivity can play music via a
Started Service • To start the Service a user needs
to push the “Play” button • If music is playing when MusicActivity
leaves the foreground, the Music Service will continue playing
• To stop the Service a user needs to explicitly push the “Stop” button
![Page 62: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/62.jpg)
Android Services & Local IPC Douglas C. Schmidt
62
send intent
1
Music Player App Interactions • MusicActivity send an Intent
via a call to startService() • This Intent indicates which
song to play Music
Activity
Intent
startService()
![Page 63: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/63.jpg)
Android Services & Local IPC Douglas C. Schmidt
63
1 send intent
Music Player App Interactions • MusicActivity send an Intent
via a call to startService() • The MusicService is
started on-demand • Based on the Activator
pattern
www.dre.vanderbilt.edu/~schmidt/PDF/Activator.pdf has more info
Intent
onCreate()
onStartCommand()
Music Service
startService()
Music Activity
![Page 64: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/64.jpg)
Android Services & Local IPC Douglas C. Schmidt
64
1
Music Player App Interactions • MusicActivity send an Intent
via a call to startService() • The MusicService is
started on-demand • The onStartCommand() starts
playing the song requested by the MusicActivity
Intent
onCreate()
onStartCommand()
Music Service
send intent startService()
Music Activity
![Page 65: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/65.jpg)
Android Services & Local IPC Douglas C. Schmidt
65
public class MusicActivity extends Activity { ... public void play (View src) { Intent intent = new Intent(MusicActivity.this, MusicService.class);
intent.putExtra("SongID", R.raw.braincandy); startService(intent); } public void stop (View src) { Intent intent = new Intent(MusicActivity.this, MusicService.class);
stopService (intent); } }
Music Player Activity Implementation
Add the song to play as an “extra”
Launch the Started Service that handles this Intent
Stop the Started Service
Clearly, a production music play app wouldn’t hard-code the song selection!!
![Page 66: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/66.jpg)
Android Services & Local IPC Douglas C. Schmidt
66
public class MusicService extends Service { MediaPlayer player;
public int onStartCommand (Intent intent, int flags, int startid) {
player = MediaPlayer.create(this, intent.getIntExtra("SongID", 0)); player.setLooping(true);
player.start(); return START_NOT_STICKY; } public void onDestroy() { player.stop(); } }
Music Player Service Implementation
developer.android.com/reference/android/media/MediaPlayer.html has more
Inherit from Service class
Extract the resid from the “extra” & create a MediaPlayer
Don’t restart Service if it shuts down
Start playing the song (doesn’t block)
Stop player when Service is destroyed
![Page 67: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/67.jpg)
Android Services & Local IPC Douglas C. Schmidt
67
<application ... > <activity android:name=".MusicActivity" android:label="@string/app_name">
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" />
</intent-filter> </activity> <service android:exported="true" android:name=".MusicService" />
</application>
AndroidManifest.xml File
Service is usable by components external to this application
developer.android.com/guide/topics/manifest/service-element.html#exported
![Page 68: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/68.jpg)
Android Services & Local IPC Douglas C. Schmidt
68
Analysis of the Music Player Service Example • This is a very simple example of a
Started Service, e.g., • It runs in the UI Thread, but
doesn’t block due to the behavior of MusicPlayer.start()
MusicService Lo
oper
Message
Message
Message
Message
Message
Message Queue
UI Thread (main thread)
Message 2. onStartCommand()
MusicActivity
1. startService()
![Page 69: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/69.jpg)
Android Services & Local IPC Douglas C. Schmidt
69
Analysis of the Music Player Service Example • This is a very simple example of a
Started Service, e.g., • It runs in the UI Thread, but
doesn’t block due to the behavior of MusicPlayer.start()
• There’s no communication from the Service back to the Activity that invoked it!
MusicService Lo
oper
Message
Message
Message
Message
Message
Message Queue
UI Thread (main thread)
Message 2. onStartCommand()
MusicActivity
1. startService()
![Page 70: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/70.jpg)
Android Services & Local IPC Douglas C. Schmidt
70
Analysis of the Music Player Service Example • This is a very simple example of a
Started Service • Services with long-running
operations typically need to run in separate Thread(s)
Download Service
Loop
er Message
Message
Message
Message
Message
Message Queue
UI Thread (main thread)
Message 2. onStartCommand()
Download Activity
1. startService()
3. onHandleIntent()
![Page 71: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/71.jpg)
Android Services & Local IPC Douglas C. Schmidt
71
• DownloadActivity requests a DownloadService to get a file from a server
Download App Overview
Download Service
Download Activity
startService()
![Page 72: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/72.jpg)
Android Services & Local IPC Douglas C. Schmidt
72
• DownloadActivity requests a DownloadService to get an image from a server • The DownloadService downloads the image & stores it in a file on the device
Download App Overview
Download Service
Download Activity
Socket
Socket
Send HTTP GET request
![Page 73: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/73.jpg)
Android Services & Local IPC Douglas C. Schmidt
73
• DownloadActivity requests a DownloadService to get an image from a server • The DownloadService downloads the image & stores it in a file on the device • The DownloadService returns the pathname of the file back to the
DownloadActivity, which then displays the image
Download App Overview
Download Service
Download Activity
Send reply
![Page 74: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/74.jpg)
Android Services & Local IPC Douglas C. Schmidt
74
1 send intent
Download App Interactions • DownloadActivity sends an Intent
via a call to startService() Download
Activity
Intent
startService()
![Page 75: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/75.jpg)
Android Services & Local IPC Douglas C. Schmidt
75
1 send intent
Download App Interactions • DownloadActivity sends an Intent
via a call to startService() • The DownloadService is
started on-demand • Based on the Activator pattern
www.dre.vanderbilt.edu/~schmidt/PDF/Activator.pdf has more info
Intent
onCreate()
onStartCommand()
Download Service
startService()
Download Activity 2
![Page 76: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/76.jpg)
Android Services & Local IPC Douglas C. Schmidt
76
1
The ServiceHandler is a common idiom in multi-threaded Android Services
Download App Interactions • DownloadActivity sends an Intent
via a call to startService() • The DownloadService is
started on-demand • The DownloadService does
several things • Creates a ServiceHandler
• Internally creates a single worker thread
Intent
onCreate()
onStartCommand()
Download Service
send intent startService()
Download Activity
Service Handler
sendMessage()
downloadImage()
handleMessage()
Create a worker
thread & Handler
3
2
![Page 77: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/77.jpg)
Android Services & Local IPC Douglas C. Schmidt
77
1
Download App Interactions • DownloadActivity sends an Intent
via a call to startService() • The DownloadService is
started on-demand • The DownloadService does
several things • Creates a ServiceHandler • Receives & queues Intents
in the ServiceHandler
Intent
onCreate()
onStartCommand()
Download Service
send intent startService()
Download Activity
Service Handler
4
sendMessage()
downloadImage()
handleMessage()
3
2
![Page 78: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/78.jpg)
Android Services & Local IPC Douglas C. Schmidt
78
1
Download App Interactions • DownloadActivity sends an Intent
via a call to startService() • The DownloadService is
started on-demand • The DownloadService does
several things • Creates a ServiceHandler • Receives & queues Intents
in the ServiceHandler • The ServiceHandler dequeues
& processes the Intent “in the background” to download the designated image
Intent
onCreate()
onStartCommand()
Download Service
send intent startService()
Download Activity
Service Handler
Dequeue Intent
& get file
4
5
sendMessage()
downloadImage()
handleMessage()
3
2
Later we’ll show how the DownloadService passes the file back to the Activity
![Page 79: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/79.jpg)
Android Services & Local IPC Douglas C. Schmidt
79
1
Download App Interactions • DownloadActivity sends an Intent
via a call to startService() • The DownloadService is
started on-demand • The DownloadService does
several things • Creates a ServiceHandler • Receives & queues Intents
in the ServiceHandler • Stops the Service when
there’s no more Intents to handle
Intent
onCreate()
Download Service
send intent startService()
Download Activity
Service Handler
Dequeue Intent
& get file
4
5
sendMessage()
downloadImage()
handleMessage()
3
![Page 80: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/80.jpg)
Android Services & Local IPC Douglas C. Schmidt
80
1
Download App Interactions • DownloadActivity sends an Intent
via a call to startService() • The DownloadService is
started on-demand • The DownloadService does
several things • This implementation of the
Command Processor pattern offloads tasks from an app’s main thread to a single worker thread
Intent
onCreate()
onStartCommand()
Download Service
send intent startService()
Download Activity
Service Handler
Dequeue Intent
& get file
4
5
sendMessage()
downloadImage()
handleMessage()
3
2
www.dre.vanderbilt.edu/~schmidt/PDF/CommandProcessor.pdf has more info
![Page 81: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/81.jpg)
Android Services & Local IPC Douglas C. Schmidt
81
Download Activity Implementation public class DownloadActivity extends Activity { ... public void onClick(View v) { Intent intent = new Intent(DownloadActivity.this, DownloadService.class); ... intent.setData(Uri.parse(editText.getText().toString())); startService(intent); } ... Handler downloadHandler = new Handler() { public void handleMessage(Message msg) { /* ... */ }
}; }
Add the URI to the download as data
Launch the Started Service that handles this Intent
Code for processing the downloaded file shown later
Some initialization code intentionally omitted
Create Intent associated with DownloadService
![Page 82: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/82.jpg)
Android Services & Local IPC Douglas C. Schmidt
82
Download Service Implementation public class DownloadService extends Service { private volatile Looper mServiceLooper; private volatile ServiceHandler mServiceHandler; public void onCreate() { super.onCreate(); HandlerThread thread = new HandlerThread("DownloadService"); thread.start(); mServiceLooper = thread.getLooper(); mServiceHandler = new ServiceHandler(mServiceLooper); }
Create/start a separate Thread since the Service normally runs in the process's UI Thread, which we don't want to block
Get the HandlerThread's Looper & use it for our Handler
![Page 83: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/83.jpg)
Android Services & Local IPC Douglas C. Schmidt
83
Download Service Implementation public class DownloadService extends Service { ... private final class ServiceHandler extends Handler { public ServiceHandler(Looper looper) { super(looper); } public void handleMessage(Message msg) { downloadImage((Intent) msg.obj); stopSelf(msg.arg1); } public void downloadImage(Intent intent) { /* ... */ } } ...
Handler that receives messages from the thread
Stop the service using the startId, so that we don't stop the service in the middle of handling another job
Dispatch a callback hook method to download a file
Download the image & notify the client
developer.android.com/guide/components/services.html#Stopping has more
![Page 84: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/84.jpg)
Android Services & Local IPC Douglas C. Schmidt
84
Download Service Implementation public class DownloadService extends Service { ... public int onStartCommand(Intent intent, int f, int startId) { Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; msg.obj = intent; mServiceHandler.sendMessage(msg); return START_NOT_STICKY; } public void onDestroy() { mServiceLooper.quit(); } }
For each Intent, create/send a message to start a download
Shutdown the looper
It’s instructive to consider how to extend this example to run in a thread pool
Include start ID in the message to know which request is being stopped when the download completes
![Page 85: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/85.jpg)
Android Services & Local IPC Douglas C. Schmidt
85
Analysis of the Download Service Example • The worker thread solution
shown here is a common Android Service idiom that implements the Command Processor pattern
Client
3
2 Queue request
www.dre.vanderbilt.edu/~schmidt/PDF/CommandProcessor.pdf has more info
![Page 86: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/86.jpg)
Android Services & Local IPC Douglas C. Schmidt
86
Analysis of the Download Service Example • The worker thread solution
shown here is a common Android Service idiom that implements the Command Processor pattern
• This pattern is a good option if you don't require that your service handle multiple requests simultaneously
Client
3
2 Queue request
www.dre.vanderbilt.edu/~schmidt/PDF/CommandProcessor.pdf has more info
![Page 87: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/87.jpg)
Android Services & Local IPC Douglas C. Schmidt
87
• Programming Started Services is relatively straightforward • e.g., inherit from Service
& override various hook methods
Summary
![Page 88: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/88.jpg)
Android Services & Local IPC Douglas C. Schmidt
88
• Programming Started Services is relatively straightforward • The Service class uses the app’s
UI Thread by default • A multi-threaded service should
therefore often extend Service directly & spawn one or more threads
Summary
Intent
onCreate()
onStartCommand()
Download Service
send intent
startService()
Download Activity
Service Handler
Dequeue Intent
& get file
4
5
sendMessage()
downloadImage()
handleMessage()
3
2 1
![Page 89: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/89.jpg)
Android Services & Local IPC Douglas C. Schmidt
89
• Programming Started Services is relatively straightforward • The Service class uses the app’s
UI Thread by default • A Service is not a Thread
• It doesn’t automatically do work off the UI Thread & avoid “Application Not Responding” errors)
Summary
![Page 90: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/90.jpg)
Android Services & Local IPC Douglas C. Schmidt
90
Intent
onCreate()
onStartCommand()
Download Service
send intent
startService()
Service Handler
dequeue Intent & download file
4
5
sendMessage()
downloadImage()
handleMessage()
3
2 1 Download
Activity
Summary • Programming Started Services is relatively straightforward • The Service class uses the app’s
UI Thread by default • A Service is not a Thread
• It doesn’t automatically do work off the UI Thread & avoid “Application Not Responding” errors)
• A Service with compute- or I/O-intensive tasks should run it’s work in a background thread or process
![Page 91: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/91.jpg)
Android Services & Local IPC Douglas C. Schmidt
91
onHandleIntent()
…
process intent
MyIntent Service
3
queue intent
dequeue intent
Service Handler
sendMessage()
onCreate()
onStartCommand()
2
Intent Intent Service
send intent
startService()
handleMessage()
4 5
1 Client
Activity
• Programming Started Services is relatively straightforward • The Service class uses the app’s
UI Thread by default • A Service is not a Thread
• It doesn’t automatically do work off the UI Thread & avoid “Application Not Responding” errors)
• A Service with compute- or I/O-intensive tasks should run it’s work in a background thread or process
• The Android IntentService class automates this type of behavior via Command Processor pattern
Summary
developer.android.com/reference/android/app/IntentService.html has more
![Page 92: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/92.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Overview of IntentService Framework
![Page 93: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/93.jpg)
Android Services & Local IPC Douglas C. Schmidt
93
Overview of IntentService • The most common Service subclass is IntentService
developer.android.com/reference/android/app/IntentService.html has more
public class IntentService extends Service { public int onStartCommand(Intent intent, int flags, int startId) { ... } protected abstract void onHandleIntent(Intent intent); }
This hook method must be implemented by subclasses to handle an Intent in a worker thread
![Page 94: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/94.jpg)
Android Services & Local IPC Douglas C. Schmidt
94
• The most common Service subclass is IntentService • Clients send Intents via calls
to startService() • Clients can pass data &
objects to the Service by putting “extras” into the Intents
1 Client send intent
startService()
Overview of IntentService
www.itcuties.com/android/intent-putextra has more info on extras
Intent
![Page 95: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/95.jpg)
Android Services & Local IPC Douglas C. Schmidt
95
1
• The most common Service subclass is IntentService • Clients send Intents via calls
to startService() • Clients can pass data &
objects to the Service by putting “extras” into the Intents
• The IntentService is started on-demand via the Activator pattern
Client
Intent Service
onCreate()
onStartCommand()
www.dre.vanderbilt.edu/~schmidt/PDF/Activator.pdf has more info
send intent
startService()
Overview of IntentService
Intent
![Page 96: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/96.jpg)
Android Services & Local IPC Douglas C. Schmidt
96
1
• The most common Service subclass is IntentService • Clients send Intents via calls
to startService() • A subclass of IntentService
implements the hook method onHandleIntent() • This hook method processes
the Intent sent by the client
Client
Intent Service
onCreate()
onStartCommand()
MyIntent Service
onHandleIntent()
…
send intent
startService()
Overview of IntentService
Intent
developer.android.com/guide/components/services.html#ExtendingIntentService
![Page 97: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/97.jpg)
Android Services & Local IPC Douglas C. Schmidt
97
1
• The most common Service subclass is IntentService • Clients send Intents via calls
to startService() • A subclass of IntentService
implements the hook method onHandleIntent()
• The IntentService does several things • Creates a ServiceHandler
• Internally creates a single worker thread
Client
Intent Service
onCreate()
onStartCommand()
2
…
3
send intent
queue intent
dequeue intent process intent
4
startService()
Overview of IntentService
MyIntent Service
onHandleIntent()
Service Handler
sendMessage()
handleMessage()
The ServiceHandler is a common idiom in multi-threaded Android Services
Intent
![Page 98: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/98.jpg)
Android Services & Local IPC Douglas C. Schmidt
98
1
onStartCommand()
• The most common Service subclass is IntentService • Clients send Intents via calls
to startService() • A subclass of IntentService
implements the hook method onHandleIntent()
• The IntentService does several things • Creates a ServiceHandler • Receives & queues
Intents in ServiceHandler • Processes the queue of
Intents “in the background”
Client
Intent Service
send intent
startService()
Overview of IntentService
onCreate()
…
process intent
4 onHandleIntent()
MyIntent Service
2
3
queue intent
dequeue intent
Service Handler
sendMessage()
handleMessage()
Intent
![Page 99: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/99.jpg)
Android Services & Local IPC Douglas C. Schmidt
99
1
• The most common Service subclass is IntentService • Clients send Intents via calls
to startService() • A subclass of IntentService
implements the hook method onHandleIntent()
• The IntentService does several things • Creates a ServiceHandler • Receives & queues
Intents in ServiceHandler • Stops the Service when
there are no more Intents to handle
Client
Intent Service
onCreate()
onStartCommand()
…
send intent
process intent
4
startService()
Overview of IntentService
MyIntent Service
onHandleIntent()
2
3
queue intent
dequeue intent
Service Handler
sendMessage()
handleMessage()
Intent
![Page 100: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/100.jpg)
Android Services & Local IPC Douglas C. Schmidt
100
1
• The most common Service subclass is IntentService • Clients send Intents via calls
to startService() • A subclass of IntentService
implements the hook method onHandleIntent()
• The IntentService does several things
• All Intents are handled in the ServiceHandler’s worker thread • They may take as long as
necessary (& will not block the app's UI Thread loop)
Client
Intent Service
onCreate()
onStartCommand()
…
process intent
4
send intent
startService()
Overview of IntentService
MyIntent Service
2
3
queue intent
dequeue intent
Service Handler
sendMessage()
handleMessage()
onHandleIntent()
Intent
![Page 101: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/101.jpg)
Android Services & Local IPC Douglas C. Schmidt
101
1
• The most common Service subclass is IntentService • Clients send Intents via calls
to startService() • A subclass of IntentService
implements the hook method onHandleIntent()
• The IntentService does several things
• All Intents are handled in the ServiceHandler’s worker thread • They may take as long as
necessary (& will not block the app's UI Thread loop)
• However, only one Intent will be processed at a time
Client
Intent Service
onCreate() send intent onStartCommand()
startService()
onHandleIntent()
…
process intent
4
Overview of IntentService
MyIntent Service
2
3
queue intent
dequeue intent
Service Handler
sendMessage()
handleMessage()
Intent
![Page 102: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/102.jpg)
Android Services & Local IPC Douglas C. Schmidt
102
Summary • The IntentService is used to perform
a certain task in the background • The IntentService framework
implements the Command Processor pattern
www.dre.vanderbilt.edu/~schmidt/PDF/CommandProcessor.pdf has more info
Client
3
2 Queue request
![Page 103: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/103.jpg)
Android Services & Local IPC Douglas C. Schmidt
103
Summary • The IntentService is used to perform
a certain task in the background • IntentService automatically stops
itself when there are no more intents in its queue • Conversely, a regular Service
needs to stop itself manually via stopSelf() or stopService()
![Page 104: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/104.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Programming the IntentService Framework
![Page 105: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/105.jpg)
Android Services & Local IPC Douglas C. Schmidt
105
Learning Objectives in this Part of the Module • Understand how to program the
IntentService framework
![Page 106: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/106.jpg)
Android Services & Local IPC Douglas C. Schmidt
106
Logging App Overview • The Logging Service extends the IntentService to
offload logging operations from an app’s UI Thread
public class LoggingService extends IntentService { protected abstract void onHandleIntent (Intent intent); }
![Page 107: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/107.jpg)
Android Services & Local IPC Douglas C. Schmidt
107
• The Logging Service extends the IntentService to offload logging operations from an app’s UI Thread
• Clients send commands (expressed as Intents) via calls to startService()
Intent intent = new Intent (this, LoggingService.class)); intent.putExtra("LogMsg", "hello world"); startService(intent);
Download Activity
Logging App Overview
![Page 108: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/108.jpg)
Android Services & Local IPC Douglas C. Schmidt
108
• The Logging Service extends the IntentService to offload logging operations from an app’s UI Thread
• Clients send commands (expressed as Intents) via calls to startService()
• The LoggingService subclass handle intents in a worker thread asynchronously
Download Service
Download Activity
public class LoggingService extends IntentService { void onHandleIntent(Intent intent) { ... } }
Logging App Overview
![Page 109: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/109.jpg)
Android Services & Local IPC Douglas C. Schmidt
109
• The Logging Service extends the IntentService to offload logging operations from an app’s UI Thread
• Clients send commands (expressed as Intents) via calls to startService()
• The LoggingService subclass handle intents in a worker thread asynchronously
Download Service
Download Activity
Logging App Overview
public class LoggingService extends IntentService { void onHandleIntent(Intent intent) { ... } } Handler
Android starts the Service as needed, which internally spawns a worker
thread that handles a queue of intents
![Page 110: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/110.jpg)
Android Services & Local IPC Douglas C. Schmidt
110
Download Service
Download Activity
The IntentService calls this hook method from the worker thread to handle each
intent that started the Service
Logging App Overview • The Logging Service extends the IntentService to
offload logging operations from an app’s UI Thread • Clients send commands (expressed as Intents) via
calls to startService() • The LoggingService subclass handle intents
in a worker thread asynchronously public class LoggingService extends IntentService { void onHandleIntent(Intent intent) { ... } } Handler
![Page 111: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/111.jpg)
Android Services & Local IPC Douglas C. Schmidt
111
Download Service
Download Activity
When there are no more intents to handle the IntentService stops itself automatically
Logging App Overview • The Logging Service extends the IntentService to
offload logging operations from an app’s UI Thread • Clients send commands (expressed as Intents) via
calls to startService() • The LoggingService subclass handle intents
in a worker thread asynchronously public class LoggingService extends IntentService { void onHandleIntent(Intent intent) { ... } } Handler
![Page 112: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/112.jpg)
Android Services & Local IPC Douglas C. Schmidt
112
public class BGLoggingActivity extends Activity { public void onCreate(Bundle savedInstanceState) { ... buttonStart.setOnClickListener(new OnClickListener() {
public void onClick(View v) { Intent intent = new Intent(BGLoggingActivity.this, BGLoggingService.class);
intent.putExtra("LogMsg", "Log this message"); startService(intent); } }); } }
Logging Activity Implementation
Add the message to log as an “extra”
Launch the Started Service that handles this Intent
Create a new Intent
![Page 113: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/113.jpg)
Android Services & Local IPC Douglas C. Schmidt
113
public class BGLoggingService extends IntentService { ... public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId); return START_NOT_STICKY; } protected void onHandleIntent(Intent intent) { ... Log.i(TAG, intent.getCharSequenceExtra ("LogMsg").toString()); } ... }
Logging Service Implementation
Inherit from IntentService class
This hook method runs in a worker thread & logs the data
Note the “inversion of control” in the Android Service framework
Don’t restart this Service if it’s shutdown
![Page 114: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/114.jpg)
Android Services & Local IPC Douglas C. Schmidt
114
<application ... > <activity android:name=".BGLoggingActivity" android:label="@string/app_name">
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" />
</intent-filter> </activity> <service android:exported="false" android:name=".BGLoggingService" />
</application>
AndroidManifest.xml File
Service is only usable by components in this application
developer.android.com/guide/topics/manifest/service-element.html#exported
![Page 115: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/115.jpg)
Android Services & Local IPC Douglas C. Schmidt
115
<application ... > <activity android:name=".BGLoggingActivity" android:label="@string/app_name">
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" />
</intent-filter> </activity> <service android:exported="false" android:name=".BGLoggingService" android:process=":myProcess"/>
</application
AndroidManifest.xml File
Instruct Android to run the BGLoggingService in its own process
developer.android.com/guide/topics/manifest/service-element.html#proc
![Page 116: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/116.jpg)
Android Services & Local IPC Douglas C. Schmidt
116
Analysis of the Logging Service Example • The LoggingService is an intentionally simplified
example
![Page 117: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/117.jpg)
Android Services & Local IPC Douglas C. Schmidt
117
Analysis of the Logging Service Example • The LoggingService is an intentionally simplified
example • You don’t need to implement it as an
IntentService (or even as a Service) • You could simply do the logging in a new
Thread or ignore concurrency altogether!
![Page 118: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/118.jpg)
Android Services & Local IPC Douglas C. Schmidt
118
Analysis of the Logging Service Example • The LoggingService is an intentionally simplified
example • You don’t need to implement it as an
IntentService (or even as a Service) • In general, use a Service (or IntentService) when
you want to run a component even when a user is not interacting with the app that hosts the Service
![Page 119: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/119.jpg)
Android Services & Local IPC Douglas C. Schmidt
119
Summary • Programming Intent Services is very straightforward
• e.g., inherit from IntentService & override onHandleIntent()
onHandleIntent()
…
process intent
MyIntent Service
onCreate()
onStartCommand()
Intent Intent Service
send intent
startService()
Client
![Page 120: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/120.jpg)
Android Services & Local IPC Douglas C. Schmidt
120
• Programming Intent Services is very straightforward • IntentService creates a worker
thread & uses that thread to run the service
Summary
onHandleIntent()
…
process intent
MyIntent Service
Service Handler
sendMessage()
onCreate()
onStartCommand()
Intent Intent Service
send intent
startService()
handleMessage()
Client
![Page 121: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/121.jpg)
Android Services & Local IPC Douglas C. Schmidt
121
• Programming Intent Services is very straightforward • IntentService creates a worker
thread & uses that thread to run the service
• IntentService also creates a queue that passes one intent at a time to onHandleIntent()
Summary
onHandleIntent()
…
process intent
MyIntent Service
3
queue intent
dequeue intent
Service Handler
sendMessage()
onCreate()
onStartCommand()
2
Intent Intent Service
send intent
startService()
handleMessage()
4 5
1 Client
IntentService is the best option if you don't require that your service handle
multiple requests simultaneously
www.vogella.com/articles/AndroidServices/article.html#service_intentservices
![Page 122: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/122.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Communicating from Started Services
to Activities via Messengers
![Page 123: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/123.jpg)
Android Services & Local IPC Douglas C. Schmidt
123
Learning Objectives in this Part of the Module • Understand how to use Messengers to communicate from Started Services
back to their invoking Activities • Provides an interface for IPC with remote processes without using AIDL
startService()
Service Handler
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
send()
8
4
6
7
Download Service
onCreate()
3
dispatch handler
9
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
create reply
handler create messenger
create Intent
send intent
Create a worker
thread & Handler
queue Intent
Dequeue Intent, extract
Messager, & get file
return to sender
![Page 124: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/124.jpg)
Android Services & Local IPC Douglas C. Schmidt
124
Overview of Messengers • A Messenger provides a reference
to a Handler that others can use to send messages to it
developer.android.com/reference/android/os/Messenger.html has more info
handleMessage()
Messenger
send()
Sender Process
1 associate
Handler with Messenger
Reply Handler
![Page 125: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/125.jpg)
Android Services & Local IPC Douglas C. Schmidt
125
Overview of Messengers • A Messenger provides a reference
to a Handler that others can use to send messages to it
• An Activity can create a Messenger pointing to a Handler in one process & then pass that Messenger to another process
handleMessage()
Messenger
send()
onCreate()
onStartCommand()
startService()
Intent (with Messenger
extra)
pass Intent
Sender Process
Receiver Process
2
1 Reply Handler
![Page 126: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/126.jpg)
Android Services & Local IPC Douglas C. Schmidt
126
Overview of Messengers • A Messenger provides a reference
to a Handler that others can use to send messages to it
• An Activity can create a Messenger pointing to a Handler in one process & then pass that Messenger to another process
• The receiver then does several things • Obtains the Messenger
Messenger (Proxy)
send()
handleMessage()
Messenger
send()
onCreate()
onStartCommand()
startService()
Intent (with Messenger
extra)
pass Intent
extract Messenger from Intent
Sender Process
Receiver Process
2
3
1 Reply Handler
![Page 127: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/127.jpg)
Android Services & Local IPC Douglas C. Schmidt
127
Overview of Messengers • A Messenger provides a reference
to a Handler that others can use to send messages to it
• An Activity can create a Messenger pointing to a Handler in one process & then pass that Messenger to another process
• The receiver then does several things • Obtains the Messenger • Returns the results back to the
sender process
Messenger (Proxy)
Reply Handler
handleMessage()
Messenger
send()
Sender Process
Receiver Process
onCreate()
onStartCommand()
startService()
Intent (with Messenger
extra)
pass Intent
2
1
extract Messenger from Intent
3
4
Return to sender
send()
![Page 128: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/128.jpg)
Android Services & Local IPC Douglas C. Schmidt
128
Overview of Messengers • A Messenger provides a reference
to a Handler that others can use to send messages to it
• An Activity can create a Messenger pointing to a Handler in one process & then pass that Messenger to another process
• The receiver then does several things • You can use Messengers with both
Bound & Started Services to implement the Command Processor pattern
www.dre.vanderbilt.edu/~schmidt/PDF/CommandProcessor.pdf has more info
![Page 129: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/129.jpg)
Android Services & Local IPC Douglas C. Schmidt
129
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
Download Activity
ReplyHandler
handleMessage()
onCreate()
initiateDownload()
1 create reply
handler
![Page 130: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/130.jpg)
Android Services & Local IPC Douglas C. Schmidt
130
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1
create messenger
2
The Messenger stores a reference
to the Handler
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
![Page 131: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/131.jpg)
Android Services & Local IPC Douglas C. Schmidt
131
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent create Intent
It also stores a reference to the Messenger as an “extra”
3
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
The Intent stores the URI for the
image to download
![Page 132: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/132.jpg)
Android Services & Local IPC Douglas C. Schmidt
132
startService()
send intent
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
4
Crossing process boundary
3 Download
Service
onStartCommand()
onCreate()
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
![Page 133: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/133.jpg)
Android Services & Local IPC Douglas C. Schmidt
133
startService()
send intent
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
4
Activate Service if it’s not already running
3 Download
Service
onStartCommand()
onCreate()
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
![Page 134: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/134.jpg)
Android Services & Local IPC Douglas C. Schmidt
134
startService()
Create a worker
thread & Handler
Download Service
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
4
sendMessage()
downloadImage()
handleMessage()
Service Handler
onStartCommand()
onCreate()
3
5
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
![Page 135: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/135.jpg)
Android Services & Local IPC Douglas C. Schmidt
135
startService()
Service Handler
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent 3
4
6
Download Service
onCreate()
queue Intent
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
![Page 136: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/136.jpg)
Android Services & Local IPC Douglas C. Schmidt
136
startService()
Service Handler
Dequeue Intent, extract
Messager, & get file
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
4
6
7
Download Service
onCreate()
3
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
![Page 137: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/137.jpg)
Android Services & Local IPC Douglas C. Schmidt
137
startService()
Service Handler
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
send()
4
6
7
return to sender
Download Service
onCreate()
3
8
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
Crossing process boundary
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
![Page 138: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/138.jpg)
Android Services & Local IPC Douglas C. Schmidt
138
startService()
Service Handler
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
send()
8
4
6
7
Download Service
onCreate()
3
dispatch handler
9
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
• DownloadActivity passes Messenger as an “extra” to the Intent used to activate the DownloadService • DownloadService uses the Messenger to reply back to the Activity
Using Messenger in Download App
![Page 139: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/139.jpg)
Android Services & Local IPC Douglas C. Schmidt
139
• DownloadActivity passes a Messenger to the DownloadService
Programming a Messenger in Download Activity
public class DownloadActivity extends Activity { ... Handler downloadHandler = new Handler() { /* ... */ }
public void initiateDownload(View v) {
Intent intent = new Intent(DownloadActivity.this, DownloadService.class); ... intent.putExtra("MESSENGER", new Messenger (downloadHandler)); startService(intent); } ... Start the service
Pass a Messenger as an “extra” in the Intent used to start the DownloadService
Create a Handler to process reply from DownloadService
![Page 140: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/140.jpg)
Android Services & Local IPC Douglas C. Schmidt
140
• DownloadService replies to Activity via Messenger’s send() method
Programming a Messenger in Download Service
public class DownloadService extends Service { ... private final class ServiceHandler extends Handler { ... public void downloadImage(Intent intent) { // ... Message msg = Message.obtain(); msg.arg1 = result; Bundle bundle = new Bundle(); bundle.putString("PATHNAME", pathname); msg.setData(bundle); Messenger messenger = (Messenger) intent.getExtras().get("MESSENGER")); messenger.send(msg); } ...
Extract Messenger & return pathname to the client
Code to downloading image to pathname goes here
![Page 141: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/141.jpg)
Android Services & Local IPC Douglas C. Schmidt
141
• DownloadActivity receives Message via its Handler in the UI Thread
Programming a Messenger in Download Activity
public class DownloadActivity extends Activity { ... Handler downloadHandler = new Handler() { public void handleMessage(Message msg) {
Bundle data = msg.getData(); String pathname = data.getString ("PATHNAME"); if (msg.arg1 != RESULT_OK || path == null) { Toast.makeText(DownloadActivity.this,"failed download", Toast.LENGTH_LONG).show(); } displayImage(path); } }; ... Display the image
Get pathname from Download Service
![Page 142: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/142.jpg)
Android Services & Local IPC Douglas C. Schmidt
142
Summary • Messengers provide a flexible framework for communicating between
processes in Android
startService()
Service Handler
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
send()
8
4
6
7
Download Service
onCreate()
3
dispatch handler
9
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
create reply
handler create messenger
create Intent
send intent
Create a worker
thread & Handler
queue Intent
Dequeue Intent, extract
Messager, & get file
return to sender
![Page 143: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/143.jpg)
Android Services & Local IPC Douglas C. Schmidt
143
Summary • Messengers provide a flexible framework for communicating between
processes in Android • Messengers make asynchrony easy, though non-trivial use-cases can be hard
startService()
Service Handler
Download Activity
ReplyHandler
handleMessage() Messenger
onCreate()
initiateDownload()
1 2
Intent
send()
8
4
6
7
Download Service
onCreate()
3
dispatch handler
9
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
create reply
handler create messenger
create Intent
send intent
Create a worker
thread & Handler
queue Intent
Dequeue Intent, extract
Messager, & get file
return to sender
![Page 144: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/144.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Communicate from Started Services to
Activities via Broadcast Receivers
![Page 145: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/145.jpg)
Android Services & Local IPC Douglas C. Schmidt
145
Learning Objectives in this Part of the Module • Understand how to use Broadcast Receivers to communicate from Started
Services back to their invoking Activities • Provides IPC with (multiple) remote processes without using AIDL
startService()
Service Handler
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate() 1
Intent
4
6
7
Download Service
onCreate()
3
5
onStartCommand()
sendMessage()
handleMessage()
onResume()
registerReceiver() 2
initiateDownload()
sendBroadcast()
8 dispatch handler
9
downloadImage()
create Broadcast Receiver
create IntentFilter &
register receiver
create Intent send
intent
Create a worker
thread & Handler
queue Intent
Dequeue Intent
& get file
broadcast ACTION_
COMPLETE Intent
![Page 146: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/146.jpg)
Android Services & Local IPC Douglas C. Schmidt
146
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events
developer.android.com/reference/android/content/BroadcastReceiver.html
Overview of Broadcast Receivers
Phone App
System Server
Activity Manager Service
1: Register for broadcast intent
Broadcast Receivers
![Page 147: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/147.jpg)
Android Services & Local IPC Douglas C. Schmidt
147
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events • Events implemented as Intents
Overview of Broadcast Receivers
Phone App
System Server
Broadcast Receivers
Battery Service
2: Detect that battery is low & create corresponding intent
Activity Manager Service
1: Register for broadcast intent
![Page 148: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/148.jpg)
Android Services & Local IPC Douglas C. Schmidt
148
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events • Events implemented as Intents • Events are broadcast system-wide
Overview of Broadcast Receivers
Phone App
System Server
Broadcast Receivers
Battery Service
3: Call sendBroadcast() to inform interested receivers that battery is low
Activity Manager Service
![Page 149: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/149.jpg)
Android Services & Local IPC Douglas C. Schmidt
149
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events • Events implemented as Intents • Events are broadcast system-wide • When an event occurs the Intents
are disseminated to all matching receivers via their onReceive() hook methods
Overview of Broadcast Receivers
Phone App
System Server
Broadcast Receivers
Battery Service
Activity Manager Service
4: onReceive() called back to report low battery
3: Call sendBroadcast() to inform interested receivers that battery is low
![Page 150: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/150.jpg)
Android Services & Local IPC Douglas C. Schmidt
150
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events
• Activities can create receivers that register for system or app events
Overview of Broadcast Receivers
Battery Service
Phone App
System Server
Activity Manager Service
1: Register for broadcast intent
Broadcast Receivers
www.vogella.com/articles/AndroidBroadcastReceiver/article.html has more
![Page 151: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/151.jpg)
Android Services & Local IPC Douglas C. Schmidt
151
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events
• Activities can create receivers that register for system or app events
• A receiver is restricted on what it can do when it handles an Intent • e.g., it may not show a dialog
or bind to a service
developer.android.com/reference/android/content/BroadcastReceiver.html#ReceiverLifecycle
Overview of Broadcast Receivers
Battery Service
Phone App
Activity Manager Service
Broadcast Receivers
![Page 152: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/152.jpg)
Android Services & Local IPC Douglas C. Schmidt
152
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events
• Activities can create receivers that register for system or app events
• A receiver is restricted on what it can do when it handles an Intent
• Two ways to register a receiver: • Statically publish it via the <receiver>
tag in the AndroidManifest.xml file
Overview of Broadcast Receivers
Phone App
Activity Manager Service
Broadcast Receivers
<receiver android:name="PhoneApp$NotificationBroadcastReceiver" exported="false"> <intent-filter> <action android:name= "com.android.phone.ACTION_HANG_UP_ONGOING_CALL" /> <action android:name= "com.android.phone.ACTION_SEND_SMS_FROM_NOTIFICATION"/> </intent-filter> </receiver>
![Page 153: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/153.jpg)
Android Services & Local IPC Douglas C. Schmidt
153
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events
• Activities can create receivers that register for system or app events
• A receiver is restricted on what it can do when it handles an Intent
• Two ways to register a receiver: • Statically publish it via the <receiver>
tag in the AndroidManifest.xml file • Dynamically register it with Context.registerReceiver()
Overview of Broadcast Receivers
final BroadcastReceiver mReceiver = new PhoneAppBroadcastReceiver(); ... IntentFilter intentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED); ... registerReceiver(mReceiver, intentFilter);
Phone App
Activity Manager Service
Broadcast Receivers
![Page 154: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/154.jpg)
Android Services & Local IPC Douglas C. Schmidt
154
1
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events
• Activities can create receivers that register for system or app events
• A receiver is restricted on what it can do when it handles an Intent
• Two ways to register a receiver • Android supports several broadcast
mechanisms • Normal – Sent with Context.sendBroadcast(), which is completely
asynchronous
Overview of Broadcast Receivers
Phone App
Activity Manager Service
Broadcast Receivers
System Server
1
developer.android.com/reference/android/content/Context.html#sendBroadcast(android.content.Intent)
![Page 155: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/155.jpg)
Android Services & Local IPC Douglas C. Schmidt
155
• BroadcastReceivers are components (receivers) that register for broadcast events & receive/react to the events
• Activities can create receivers that register for system or app events
• A receiver is restricted on what it can do when it handles an Intent
• Two ways to register a receiver • Android supports several broadcast
mechanisms • Normal – Sent with Context.sendBroadcast(), which is completely
asynchronous • Ordered – Sent with Context.sendOrderedBroadcast(), which is delivered
to one receiver at a time
Overview of Broadcast Receivers
Phone App
Activity Manager Service
Broadcast Receivers
System Server
1 2
developer.android.com/reference/android/content/Context.html#sendOrderedBroadcast(android.content.Intent, java.lang.String)
![Page 156: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/156.jpg)
Android Services & Local IPC Douglas C. Schmidt
156
Download Activity
BroadcastReceiver
onReceive()
onCreate() 1
Using a Broadcast Receiver in the Download App
onResume()
initiateDownload()
create Broadcast Receiver
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
![Page 157: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/157.jpg)
Android Services & Local IPC Douglas C. Schmidt
157
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate()
onResume()
registerReceiver() 2
initiateDownload()
1
create IntentFilter &
register receiver
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
Using a Broadcast Receiver in the Download App
![Page 158: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/158.jpg)
Android Services & Local IPC Douglas C. Schmidt
158
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate()
Intent 3
onResume()
registerReceiver() 2
initiateDownload()
create Intent
The Intent stores the URI as an “extra”
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
1
Using a Broadcast Receiver in the Download App
![Page 159: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/159.jpg)
Android Services & Local IPC Douglas C. Schmidt
159
startService()
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate()
Intent
4
Download Service
onCreate()
3
onStartCommand() onResume()
registerReceiver() 2
initiateDownload()
Crossing process boundary
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
send intent
1
Using a Broadcast Receiver in the Download App
![Page 160: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/160.jpg)
Android Services & Local IPC Douglas C. Schmidt
160
startService()
Service Handler
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate()
Intent
4
Download Service
onCreate()
3
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
onResume()
registerReceiver() 2
initiateDownload()
Create a worker
thread & Handler
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
1
Using a Broadcast Receiver in the Download App
![Page 161: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/161.jpg)
Android Services & Local IPC Douglas C. Schmidt
161
startService()
Service Handler
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate()
Intent
4
6
Download Service
onCreate()
3
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
onResume()
registerReceiver() 2
initiateDownload()
queue Intent
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
1
Using a Broadcast Receiver in the Download App
![Page 162: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/162.jpg)
Android Services & Local IPC Douglas C. Schmidt
162
startService()
Service Handler
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate()
Intent
4
6
7
Download Service
onCreate()
3
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
onResume()
registerReceiver() 2
initiateDownload()
Dequeue Intent
& get file
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
1
Using a Broadcast Receiver in the Download App
![Page 163: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/163.jpg)
Android Services & Local IPC Douglas C. Schmidt
163
startService()
Service Handler
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate()
Intent
sendBroadcast()
4
6
7
Download Service
onCreate()
3
broadcast ACTION_
COMPLETE Intent
5
onStartCommand()
sendMessage()
downloadImage()
handleMessage()
onResume()
registerReceiver() 2
initiateDownload()
8
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
1
Using a Broadcast Receiver in the Download App
![Page 164: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/164.jpg)
Android Services & Local IPC Douglas C. Schmidt
164
startService()
Service Handler
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate()
Intent
4
6
7
Download Service
onCreate()
3
5
onStartCommand()
sendMessage()
handleMessage()
• DownloadActivity creates & registers a BroadcastReceiver with an IntentFilter configured with the ACTION_COMPLETE action • DownloadService broadcasts an ACTION_COMPLETE back to the Activity
onResume()
registerReceiver() 2
initiateDownload()
sendBroadcast()
8 dispatch handler
9
downloadImage()
1
Using a Broadcast Receiver in the Download App
![Page 165: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/165.jpg)
Android Services & Local IPC Douglas C. Schmidt
165
Programming a Broadcast Receiver in Activity
public class DownloadActivity extends Activity { private BroadcastReceiver onEvent = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String path = intent.getStringExtra(RESULT_PATH); if (path == null) { Toast.makeText(DownloadActivity.this, "Download failed.", Toast.LENGTH_LONG).show(); } displayImage(path); } }; ...
• DownloadActivity contains a BroadcastReceiver instance with hook method
Receive Intent sent by sendBroadcast()
Extract the path using “extra” within the Intent
Display the image
![Page 166: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/166.jpg)
Android Services & Local IPC Douglas C. Schmidt
166
public class DownloadActivity extends Activity { ... public void onResume() { super.onResume(); IntentFilter filter = new IntentFilter(ACTION_COMPLETE); registerReceiver(onEvent, filter); } public void onPause() { super.onPause(); unregisterReceiver(onEvent); } ...
• DownloadActivity’s lifecycle methods register & unregister the receiver
Register BroadcastReceiver when Activity resumes
Unregister BroadcastReceiver before Activity pauses
Programming a Broadcast Receiver in Activity
![Page 167: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/167.jpg)
Android Services & Local IPC Douglas C. Schmidt
167
• DownloadActivity passes the package name to the DownloadService
public class DownloadActivity extends Activity { ... public void initiateDownload(View v) {
Intent intent = new Intent(DownloadActivity.this, DownloadService.class); ... intent.putExtra(PACKAGE_NAME, getPackageName()); startService(intent); } ...
Start the service
Pass a package name as an “extra” in the Intent used to start the DownloadService
Programming a Broadcast Receiver in Activity
![Page 168: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/168.jpg)
Android Services & Local IPC Douglas C. Schmidt
168
• DownloadService replies to DownloadActivity via sendBroadcast()
public class DownloadService extends Service { ... private final class ServiceHandler extends Handler { ... public void downloadImage(Intent intent) { // ... Intent replyIntent = new Intent(ACTION_COMPLETE); replyIntent.putExtra(RESULT_PATH, pathname); String packageName = intent.getStringExtra(PACKAGE_NAME); intent.setPackage(packageName);
sendBroadcast(replyIntent); } ...
Broadcast pathname to Activity
Code to downloading image to pathname goes here
Programming a Broadcast Receiver in Service
Restrict the target of the broadcast
![Page 169: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/169.jpg)
Android Services & Local IPC Douglas C. Schmidt
169
Summary • Broadcast Receivers provide a scalable framework for communicating
between (potentially multiple) processes in Android • Broadcast Receivers are generally used for more interesting use-cases…
startService()
Service Handler
Download Activity
BroadcastReceiver
onReceive() IntentFilter
onCreate() 1
Intent
4
6
7
Download Service
onCreate()
3
5
onStartCommand()
sendMessage()
handleMessage()
onResume()
registerReceiver() 2
initiateDownload()
sendBroadcast()
8 dispatch handler
9
downloadImage()
create Broadcast Receiver
create IntentFilter &
register receiver
create Intent send
intent
Create a worker
thread & Handler
queue Intent
Dequeue Intent
& get file
broadcast ACTION_
COMPLETE Intent
developer.android.com/reference/android/content/BroadcastReceiver.html#Security
![Page 170: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/170.jpg)
Android Services & Local IPC Douglas C. Schmidt
170
Summary • Broadcast Receivers provide a scalable framework for communicating
between (potentially multiple) processes in Android • However, there are subtle issues with security
developer.android.com/reference/android/content/BroadcastReceiver.html#Security
![Page 171: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/171.jpg)
Android Services & Local IPC Douglas C. Schmidt
171
Summary • Broadcast Receivers provide a scalable framework for communicating
between (potentially multiple) processes in Android • However, there are subtle issues with security
• The Intent namespace is global • This may cause subtle conflicts
![Page 172: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/172.jpg)
Android Services & Local IPC Douglas C. Schmidt
172
Summary • Broadcast Receivers provide a scalable framework for communicating
between (potentially multiple) processes in Android • However, there are subtle issues with security
• The Intent namespace is global • registerReceiver() allows any
app to send broadcasts to that registered receiver • Use permissions to
address this
developer.android.com/reference/android/content/BroadcastReceiver.html#Security
![Page 173: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/173.jpg)
Android Services & Local IPC Douglas C. Schmidt
173
Summary • Broadcast Receivers provide a scalable framework for communicating
between (potentially multiple) processes in Android • However, there are subtle issues with security
• The Intent namespace is global • registerReceiver(BroadcastReceiver,
IntentFilter) allows any app to send broadcasts to that registered receiver
• When a receiver is published in an app’s manifest & specifies intent- filters for it, any other app can send broadcasts to it regardless of the specified filters • To prevent others from sending
to it, make it unavailable to them with android:exported="false"
developer.android.com/guide/topics/manifest/receiver-element.html
<receiver android:enabled= ["true" | "false"] android:exported= ["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:process="string" > ... </receiver>
![Page 174: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/174.jpg)
Android Services & Local IPC Douglas C. Schmidt
174
Summary • Broadcast Receivers provide a scalable framework for communicating
between (potentially multiple) processes in Android • However, there are subtle issues with security
• The Intent namespace is global • registerReceiver(BroadcastReceiver,
IntentFilter) allows any app to send broadcasts to that registered receiver
• When a receiver is published in an app’s manifest & specifies intent- filters for it, any other app can send broadcasts to it regardless of the filters that are specified
• sendBroadcast() et al allow any other app to receive broadcasts • Broadcasts can be restricted to a single app with Intent.setPackage()
developer.android.com/reference/android/content/Intent.html#setPackage(java.lang.String)
![Page 175: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/175.jpg)
Douglas C. Schmidt [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science Institute for Software Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Android Services & Local IPC: Communicating via Pending Intents
![Page 176: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/176.jpg)
Android Services & Local IPC Douglas C. Schmidt
176
Learning Objectives in this Part of the Module • Understand how to use Pending Intents to communicate from (Started)
Services back to other components (e.g., Activities, Broadcast Receivers, etc.) • A PendingIntent is a token given to an App to perform an action on your
Apps' behalf irrespective of whether your App’s process is alive
DeferredDownload Activity
Pending Intent
onCreate()
DeferredDownloadService
5
send() schedule Pending
Intent
create Intent
1
AlarmManager Service
set()
create Pending
Intent
deferredDownload() process Intent &
download image
2
Notification ManagerService
ViewDownload Activity
notify()
handleMessage()
send Intent when
alarm expires
onCreate()
create/ schedule Intent & Pending
Intent
3
displayImage()
onCreate()
6
StatusBar ManagerService
onHandleIntent()
7
onClickHandler()
9 addNotification()
4
8
register PendingIntent
send Pending
Intent process Intent
![Page 177: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/177.jpg)
Android Services & Local IPC Douglas C. Schmidt
177
Overview of Pending Intents • A PendingIntent is a token given by
an App to another component that allows it to use the permissions of the App to execute a piece of code • e.g., Notification Manager, Alarm
Manager, or other 3rd party apps
developer.android.com/reference/android/app/PendingIntent.html
Notifications in the notification area
Notifications in the notification drawer
![Page 178: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/178.jpg)
Android Services & Local IPC Douglas C. Schmidt
178
Overview of Pending Intents • A PendingIntent is a token given by
an App to another component that allows it to use the permissions of the App to execute a piece of code • e.g., Notification Manager, Alarm
Manager, or other 3rd party apps • The token maintained by the system
represents an Intent & the action to perform on that Intent later • Can be configured to work
irrespective of whether the original App process is alive or not
developer.android.com/reference/android/app/PendingIntent.html
Start an Activity to read email
![Page 179: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/179.jpg)
Android Services & Local IPC Douglas C. Schmidt
179
Overview of Pending Intents • A PendingIntent is a token given by
an App to another component that allows it to use the permissions of the App to execute a piece of code
• PendingIntents can be created via various methods, e.g.: • getActivity() on PendingIntent
• The PendingIntent returned by this method starts a new Activity when send() is called on it
developer.android.com/reference/android/app/PendingIntent.html #getActivity(android.content.Context, int, android.content.Intent, int)
![Page 180: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/180.jpg)
Android Services & Local IPC Douglas C. Schmidt
180
Overview of Pending Intents • A PendingIntent is a token given by
an App to another component that allows it to use the permissions of the App to execute a piece of code
• PendingIntents can be created via various methods, e.g.: • getActivity() on PendingIntent • getBroadcast() on PendingIntent
• The PendingIntent returned by this method sends a broadcast to a Receiver when send() is called on it
developer.android.com/reference/android/app/PendingIntent.html #getBroadcast(android.content.Context, int, android.content.Intent, int)
![Page 181: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/181.jpg)
Android Services & Local IPC Douglas C. Schmidt
181
Overview of Pending Intents • A PendingIntent is a token given by
an App to another component that allows it to use the permissions of the App to execute a piece of code
• PendingIntents can be created via various methods, e.g.: • getActivity() on PendingIntent • getBroadcast() on PendingIntent • getService() on PendingIntent
• The PendingIntent returned by this method starts a new Service when send() is called on it
developer.android.com/reference/android/app/PendingIntent.html #getService(android.content.Context, int, android.content.Intent, int)
![Page 182: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/182.jpg)
Android Services & Local IPC Douglas C. Schmidt
182
Overview of Pending Intents • A PendingIntent is a token given by
an App to another component that allows it to use the permissions of the App to execute a piece of code
• PendingIntents can be created via various methods, e.g.: • getActivity() on PendingIntent • getBroadcast() on PendingIntent • getService() on PendingIntent • createPendingResult() on Activity
• The PendingIntent returned by this method sends data back to the Activity via its method onActivityResult()
developer.android.com/reference/android/app/Activity.html #createPendingResult(int, android.content.Intent, int)
![Page 183: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/183.jpg)
Android Services & Local IPC Douglas C. Schmidt
183
PendingIntent pi; AlarmManager mgr; void onCreate(Bundle b) { AlarmManager mgr =(AlarmManager) getSystemService (ALARM_SERVICE); Intent replyIntent = new Intent(); ... // Set “extras” in replyIntent pi = createPendingResult (ALARM_ID, replyIntent, 0); mgr.setRepeating (AlarmManager. ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + PERIOD, PERIOD, pi); finish(); }
Using PendingIntent w/AlarmManager Service • PendingIntents are often used with
alarms • Activity creates & schedules a
PendingIntent with the Alarm Service
Activity
Alarm Manager
Cause the alarm to restart the Activity
when it expires
![Page 184: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/184.jpg)
Android Services & Local IPC Douglas C. Schmidt
184 developer.android.com/reference/android/app/AlarmManager.html
• PendingIntents are often used with alarms • Activity creates & schedules a
PendingIntent with the Alarm Service
void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) { Alarm alarm = new Alarm(); ... alarm.when = triggerAtTime; alarm.repeatInterval = interval; alarm.operation = operation; Message msg = Message.obtain(); msg.what = ALARM_EVENT; ... mHandler.sendMessageAtTime (msg, alarm.when); }
Alarm Manager
AlarmManager maintains its schedule outside of an App’s process, so it can give the App control, even if it has to start up a new process along the way
Using PendingIntent w/AlarmManager Service
![Page 185: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/185.jpg)
Android Services & Local IPC Douglas C. Schmidt
185
• PendingIntents are often used with alarms • Activity creates & schedules a
PendingIntent with the Alarm Service
• When the timer expires the Alarm Service sends a reply back to the Activity
class AlarmHandler extends Handler { void handleMessage(Message m) { ... alarm.operation.send(); ... } }
Alarm Manager
Using PendingIntent w/AlarmManager Service
![Page 186: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/186.jpg)
Android Services & Local IPC Douglas C. Schmidt
186
• PendingIntents are often used with alarms • Activity creates & schedules a
PendingIntent with the Alarm Service
• When the timer expires the Alarm Service sends a reply back to the Activity
• The Activity is retarted & its onActivityResult() method handles the reply
void onActivityResult (int requestCode, int resultCode, Intent data) { if (requestCode == ALARM_ID) { // Do something with // data in the Intent } }
Activity
Alarm Manager
Using PendingIntent w/AlarmManager Service
![Page 187: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/187.jpg)
Android Services & Local IPC Douglas C. Schmidt
187
DeferredDownload Activity
onCreate()
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
Using Pending Intents in Deferred Download App
create Intent
1
deferredDownload()
![Page 188: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/188.jpg)
Android Services & Local IPC Douglas C. Schmidt
188
DeferredDownload Activity
Pending Intent
onCreate()
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
Using Pending Intents in Deferred Download App
1 create Pending
Intent
deferredDownload()
2
The PendingIntent stores a reference
to the Intent
![Page 189: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/189.jpg)
Android Services & Local IPC Douglas C. Schmidt
189
DeferredDownload Activity
Pending Intent
onCreate()
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
Using Pending Intents in Deferred Download App
schedule Pending
Intent
1
AlarmManager Service
set()
deferredDownload()
2
handleMessage() 3
Schedule an alarm to run at some future
point in time
![Page 190: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/190.jpg)
Android Services & Local IPC Douglas C. Schmidt
190
DeferredDownload Activity
Pending Intent
onCreate()
DeferredDownloadService
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
send()
Using Pending Intents in Deferred Download App
1
AlarmManager Service
set()
deferredDownload()
2
handleMessage()
send Intent when
alarm expires
onCreate()
3 onHandleIntent() 4
![Page 191: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/191.jpg)
Android Services & Local IPC Douglas C. Schmidt
191
DeferredDownload Activity
Pending Intent
onCreate()
DeferredDownloadService
5
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
send()
Using Pending Intents in Deferred Download App
1
AlarmManager Service
set()
deferredDownload() process Intent &
download image
2
handleMessage() onCreate()
3 onHandleIntent() 4
![Page 192: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/192.jpg)
Android Services & Local IPC Douglas C. Schmidt
192
DeferredDownload Activity
Pending Intent
onCreate()
DeferredDownloadService
5
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
send()
Using Pending Intents in Deferred Download App
1
AlarmManager Service
set()
deferredDownload()
2
Notification ManagerService
notify()
handleMessage() onCreate()
create/ schedule Intent & Pending
Intent
3
6
onHandleIntent() 4
![Page 193: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/193.jpg)
Android Services & Local IPC Douglas C. Schmidt
193
DeferredDownload Activity
Pending Intent
onCreate()
DeferredDownloadService
5
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
send()
Using Pending Intents in Deferred Download App
1
AlarmManager Service
set()
deferredDownload()
2
Notification ManagerService
notify()
handleMessage() onCreate()
3
6
StatusBar ManagerService
onHandleIntent()
7
onClickHandler()
addNotification()
4
register PendingIntent
![Page 194: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/194.jpg)
Android Services & Local IPC Douglas C. Schmidt
194
DeferredDownload Activity
Pending Intent
onCreate()
DeferredDownloadService
5
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
send()
Using Pending Intents in Deferred Download App
1
AlarmManager Service
set()
deferredDownload()
2
Notification ManagerService
ViewDownload Activity
notify()
handleMessage() onCreate()
3
displayImage()
onCreate()
6
StatusBar ManagerService
onHandleIntent()
7
onClickHandler()
addNotification()
4
8
send Pending
Intent
![Page 195: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/195.jpg)
Android Services & Local IPC Douglas C. Schmidt
195
DeferredDownload Activity
Pending Intent
onCreate()
DeferredDownloadService
5
• DownloadActivity creates a PendingIntent that’s registered with the Alarm Service to start DeferredDownloadService to download an image in the future • DeferredDownloadService uses Notification Service to inform user when the
image has been downloaded
send()
Using Pending Intents in Deferred Download App
1
AlarmManager Service
set()
deferredDownload()
2
Notification ManagerService
ViewDownload Activity
notify()
handleMessage() onCreate()
3
displayImage()
onCreate()
6
StatusBar ManagerService
onHandleIntent()
7
onClickHandler()
9 addNotification()
4
8
process Intent
![Page 196: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/196.jpg)
Android Services & Local IPC Douglas C. Schmidt
196
Programming DeferredDownloadActivity
public class DeferredDownloadActivity extends Activity { ... public void initiateDeferredDownload(View v) { Intent intent = new Intent(DownloadActivity.this, DeferredDownloadService.class); PendingIntent sender = PendingIntent.getService( DownloadActivity.this, 0, intent, 0); AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, downloadTime, sender); }
• This Activity creates a PendingIntent & schedules it with Alarm Service
Create PendingIntent that starts a Service to download the image
www.vogella.com/articles/AndroidNotifications/article.html#pendingintent has more
Schedule an alarm to trigger the PendingIntent at the desired time
![Page 197: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/197.jpg)
Android Services & Local IPC Douglas C. Schmidt
197
• DeferredDownloadService uses the Android Notification Service to alert user when a requested image has been downloaded public class DeferredDownloadService extends IntentService { ... protected void onHandleIntent(Intent intent) { String pathname = downloadImage(intent); Intent viewDownloadIntent = new Intent(this, ViewDownloadActivity.class); intent.setData(pathname); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, viewDownloadIntent, 0); ...
Code to downloading image to pathname goes here
Programming DeferredDownloadService
Prepare Intent to trigger if notification is selected
Create PendingIntent to register with Notification Service
![Page 198: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/198.jpg)
Android Services & Local IPC Douglas C. Schmidt
198
public class DeferredDownloadService extends IntentService { ... protected void onHandleIntent(Intent intent) { ... Notification notification = new Notification.Builder(this) .setContentTitle("Image download complete") .setContentText(pathname).setSmallIcon(R.drawable.icon) .setContentIntent(contentIntent).build(); NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(0, notification); ...
• DeferredDownloadService uses Notification Service to alert user when a requested image has been downloaded
Build notification
Programming DeferredDownloadService
Register with the Notification Service
![Page 199: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/199.jpg)
Android Services & Local IPC Douglas C. Schmidt
199
Programming ViewDownloadActivity • This Activity is called when the user selects a notification that indicates the
download has succeeded public class ViewDownloadActivity extends Activity { ... public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent callersIntent = getIntent(); String pathname = callersIntent.getData().toString(); displayImage(pathname); }
Get the pathname from the Intent that started this Activity
Display the image
![Page 200: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/200.jpg)
Android Services & Local IPC Douglas C. Schmidt
200
Summary • Pending Intents provide a powerful framework for an App to delegate some
processing to another App at some future time or in some other context
DeferredDownload Activity
Pending Intent
onCreate()
DeferredDownloadService
5
send() schedule Pending
Intent
create Intent
1
AlarmManager Service
set()
create Pending
Intent
deferredDownload() process Intent &
download image
2
Notification ManagerService
ViewDownload Activity
notify()
handleMessage()
send Intent when
alarm expires
onCreate()
create/ schedule Intent & Pending
Intent
3
displayImage()
onCreate()
6
StatusBar ManagerService
onHandleIntent()
7
onClickHandler()
9 addNotification()
4
8
register PendingIntent
send Pending
Intent process Intent
![Page 201: schmidt/cs282/PDFs/8-Services-and-IPC-pa… · Android Services & Local IPC Douglas C. Schmidt 4 • Services don’t have a visual user interface & often run in the background in](https://reader034.fdocuments.in/reader034/viewer/2022042320/5f0982607e708231d4272a04/html5/thumbnails/201.jpg)
Android Services & Local IPC Douglas C. Schmidt
201
Summary • Pending Intents provide a powerful framework for an App to delegate some
processing to another App at some future time or in some other context • Pending Intents can also be used to communicate from a (Started) Service
back to some other Android component • They are a bit complicated to use… DeferredDownload
Activity
Pending Intent
onCreate()
DeferredDownloadService
5
send() schedule Pending
Intent
create Intent
1
AlarmManager Service
set()
create Pending
Intent
deferredDownload() process Intent &
download image
2
Notification ManagerService
ViewDownload Activity
notify()
handleMessage()
send Intent when
alarm expires
onCreate()
create/ schedule Intent & Pending
Intent
3
displayImage()
onCreate()
6
StatusBar ManagerService
onHandleIntent()
7
onClickHandler()
9 addNotification()
4
8
register PendingIntent
send Pending
Intent process Intent