English 中文(简体)
Android Basics

Android - User Interface

Android Advanced Concepts

Android Useful Examples

Android Useful Resources

Selected Reading

Android - Services
  • 时间:2025-02-05

Android - Services


Previous Page Next Page  
A service is a component that runs in the background to perform long-running operations without needing to interact with the user and it works even if apppcation is destroyed. A service can essentially take two states −
Sr.No. State & Description
1

Started

A service is started when an apppcation component, such as an activity, starts it by calpng startService(). Once started, a service can run in the background indefinitely, even if the component that started it is destroyed.

2

Bound

A service is bound when an apppcation component binds to it by calpng bindService(). A bound service offers a cpent-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 pfe cycle 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 pfe cycle when the service is created with startService() and the diagram on the right shows the pfe cycle when the service is created with bindService(): (image courtesy : android.com )

Android Service pfecycle

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.

Sr.No. Callback & Description
1

onStartCommand()

The system calls this method when another component, such as an activity, requests that the service be started, by calpng startService(). If you implement this method, it is your responsibipty to stop the service when its work is done, by calpng stopSelf() or stopService() methods.

2

onBind()

The system calls this method when another component wants to bind with the service by calpng bindService(). If you implement this method, you must provide an interface that cpents 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.

3

onUnbind()

The system calls this method when all cpents have disconnected from a particular interface pubpshed by the service.

4

onRebind()

The system calls this method when new cpents have connected to the service, after it had previously been notified that all had disconnected in its onUnbind(Intent).

5

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.

6

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 psteners, receivers, etc.

The following skeleton service demonstrates each of the pfe cycle methods −

package com.tutorialspoint;

import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
import android.os.Bundle;

pubpc class HelloService extends Service {
   
   /** indicates how to behave if the service is killed */
   int mStartMode;
   
   /** interface for cpents that bind */
   IBinder mBinder;     
   
   /** indicates whether onRebind should be used */
   boolean mAllowRebind;

   /** Called when the service is being created. */
   @Override
   pubpc void onCreate() {
     
   }

   /** The service is starting, due to a call to startService() */
   @Override
   pubpc int onStartCommand(Intent intent, int flags, int startId) {
      return mStartMode;
   }

   /** A cpent is binding to the service with bindService() */
   @Override
   pubpc IBinder onBind(Intent intent) {
      return mBinder;
   }

   /** Called when all cpents have unbound with unbindService() */
   @Override
   pubpc boolean onUnbind(Intent intent) {
      return mAllowRebind;
   }

   /** Called when a cpent is binding to the service with bindService()*/
   @Override
   pubpc void onRebind(Intent intent) {

   }

   /** Called when The service is no longer used and is being destroyed */
   @Override
   pubpc void onDestroy() {

   }
}

Example

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 apppcation we created in Hello World Example chapter −

Step Description
1 You will use Android StudioIDE to create an Android apppcation and name it as My Apppcation under a package com.example.tutorialspoint7.myapppcation as explained in the Hello World Example chapter.
2 Modify main activity file MainActivity.java to add startService() and stopService() methods.
3 Create a new java file MyService.java under the package com.example.My Apppcation. This file will have implementation of Android service related methods.
4 Define your service in AndroidManifest.xml file using <service.../> tag. An apppcation can have one or more services without any restrictions.
5 Modify the default content of res/layout/activity_main.xml file to include two buttons in pnear layout.
6 No need to change any constants in res/values/strings.xml file. Android studio take care of string values
7 Run the apppcation to launch Android emulator and verify the result of the changes done in the apppcation.

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

package com.example.tutorialspoint7.myapppcation;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;

pubpc class MainActivity extends Activity {
   String msg = "Android : ";

   /** Called when the activity is first created. */
   @Override
   pubpc void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Log.d(msg, "The onCreate() event");
   }

   pubpc void startService(View view) {
      startService(new Intent(getBaseContext(), MyService.class));
   }

   // Method to stop the service
   pubpc void stopService(View view) {
      stopService(new Intent(getBaseContext(), MyService.class));
   }
}

Following is the content of 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()

package com.example.tutorialspoint7.myapppcation;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;

/**
   * Created by TutorialsPoint7 on 8/23/2016.
*/

pubpc class MyService extends Service {
   @Nullable
   @Override
   pubpc IBinder onBind(Intent intent) {
      return null;
   }
	
   @Override
   pubpc int onStartCommand(Intent intent, int flags, int startId) {
      // Let it continue running until it is stopped.
      Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
      return START_STICKY;
   }

   @Override
   pubpc void onDestroy() {
      super.onDestroy();
      Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
   }
}

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint7.myapppcation">

   <apppcation
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
		
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
		
      <service android:name=".MyService" />
   </apppcation>

</manifest>

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Example of services"
      android:layout_apgnParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_above="@+id/imageButton"
      android:layout_centerHorizontal="true"
      android:layout_marginBottom="40dp" />

   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_centerVertical="true"
      android:layout_centerHorizontal="true" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/button2"
      android:text="Start Services"
      android:onCpck="startService"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Stop Services"
      android:id="@+id/button"
      android:onCpck="stopService"
      android:layout_below="@+id/button2"
      android:layout_apgnLeft="@+id/button2"
      android:layout_apgnStart="@+id/button2"
      android:layout_apgnRight="@+id/button2"
      android:layout_apgnEnd="@+id/button2" />

</RelativeLayout>

Let s try to run our modified Hello World! apppcation we just modified. I assume you had created your AVD while doing environment setup. To run the app from Android studio, open one of your project s activity files and cpck Run Android StudioRun Icon icon from the tool bar. Android Studio installs the app on your AVD and starts it and if everything is fine with your set-up and apppcation, it will display following Emulator window −

Android Service Demo

Now to start your service, let s cpck 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 −

Android Service Start

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

Advertisements