Android Services

Android Services

A service is a component that runs in the background to perform long-running operations without needing to interact with the user. For example, a service might play music in the background while the user is in a different application, or it might fetch data over the network without blocking user interaction with an activity. A service can essentially take two states:

StateDescription
StartedA service is started when an application component, such as an activity, starts it by calling startService(). Once started, a service can run in the background indefinitely, even if the component that started it is destroyed.
BoundA service is bound when an application component binds to it by calling bindService(). A bound service offers a client-server interface that allows components to interact with the service, send requests, get results, and even do so across processes with interprocess communication (IPC).

A service has lifecycle callback methods that you can implement to monitor changes in the service’s state and you can perform work at the appropriate stage. The following diagram on the left shows the lifecycle when the service is created with startService() and the diagram on the right shows the lifecycle when the service is created with bindService():

android_service_lifecycle

 

To create an service, you create a Java class that extends the Service base class or one of its existing subclasses. The Service base class defines various callback methods and the most important are given below. You don’t need to implement all the callbacks methods. However, it’s important that you understand each one and implement those that ensure your app behaves the way users expect.

CallbackDescription
onStartCommand()The system calls this method when another component, such as an activity, requests that the service be started, by calling startService(). If you implement this method, it is your responsibility to stop the service when its work is done, by calling stopSelf() or stopService() methods.
onBind()The system calls this method when another component wants to bind with the service by calling bindService(). If you implement this method, you must provide an interface that clients use to communicate with the service, by returning an IBinder object. You must always implement this method, but if you don't want to allow binding, then you should return null.
onUnbind()The system calls this method when all clients have disconnected from a particular interface published by the service.
onRebind()The system calls this method when new clients have connected to the service, after it had previously been notified that all had disconnected in its onUnbind(Intent).
onCreate()The system calls this method when the service is first created using onStartCommand() or onBind(). This call is required to perform one-time set-up.
onDestroy()The system calls this method when the service is no longer used and is being destroyed. Your service should implement this to clean up any resources such as threads, registered listeners, receivers, etc.

The following skeleton service demonstrates each of the lifecycle methods:

Example

VIDEO DEMO

This example will take you through simple steps to show how to create your own Android Service. Follow the following steps to modify the Android application we created in Hello World Example chapter:

StepDescription
1You will use Eclipse IDE to create an Android application and name it as Android Services.
2Modify main activity file MainActivity.java to add startService() and stopService() methods.
3Create a new java file MyService.java under the package com.android_services. This file will have implementation of Android service related methods.
4Define your service in AndroidManifest.xml file using tag. An application can have one or more services without any restrictions.
5Modify the default content of res/layout/activity_main.xml file to include two buttons in linear layout.
6No need to change any constants in res/values/strings.xml file. Eclipse take care of string values.
7Run the application to launch Android emulator and verify the result of the changes done in the application.

Following is the content of the modified main activity filesrc/com.android_services/MainActivity.java. This file can include each of the fundamental lifecycle methods. We have added startService() and stopService() methods to start and stop the service.

Following is the content of src/com.android_services/MyService.java. This file can have implementation of one or more methods associated with Service based on requirements. For now we are going to implement only two methods onStartCommand() and onDestroy():

Following will the modified content of AndroidManifest.xml file. Here we have added <service…/> tag to include our service:

Following will be the content of res/layout/activity_main.xml file to include two buttons:

Following will be the content of res/values/strings.xml to define two new constants:

Let’s try to run our modified Android_Services application we just modified. I assume you had created your AVD while doing environment setup. To run the app from Eclipse, open one of your project’s activity files and click Run icon from the toolbar. Eclipse installs the app on your AVD and starts it and if everything is fine with your setup and application, it will display following Emulator window:

open_activity

Now to start your service, let’s click on Start Service button, this will start the service and as per our programming in onStartCommand() method, a message Service Started will appear on the bottom of the the simulator as follows:

start_service

To stop the service, you can click the Stop Service button.

service_stopped

 

Thanks. 🙂

 

Download Source Code – >

Leave a Comment

Comment (required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Name (required)
Email (required)