Service in android with example

     A Service in Android is an application component that can perform the long-running operation and does not provide any user interface.Service can run background if the user switched to another application.

A Service in Android essentially takes two states.

Started Service

     A 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. Usually, a started service performs a single operation and does not return a result to the caller. For example, it might download or upload a file over the network. When the operation is done, the service should stop itself.

Bound Service

     A 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 bound service runs only as long as another application component is bound to it. Multiple components can bind to the service at once, but when all of them unbind, the service is destroyed.

Service lifecycle callback methods

     The system calls this method when another component, such as an activity, requests that the service be started, by calling startService(). Once this method executes, the service is started and can run in the background indefinitely. If you implement this, it is your responsibility to stop the service when its work is done, by calling stopSelf() or stopService(). (If you only want to provide binding, you don’t need to implement this method.)
     The system calls this method when another component wants to bind with the service (such as to perform RPC), by calling bindService(). In your implementation of this method, you must provide an interface that clients use to communicate with the service, by returning an IBinder. You must always implement this method, but if you don’t want to allow binding, then you should return null.
     The system calls this method when the service is first created, to perform one-time setup procedures (before it calls either onStartCommand() or onBind()). If the service is already running, this method is not called.
     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. This is the last call the service receives.

Started Service in Android example

// Below I am going to show how to start and stop the started service.

MainActivity.Java
 package com.example.velmurugan.unbindservice;  
 import android.content.Intent;  
 import android.support.v7.app.AppCompatActivity;  
 import android.os.Bundle;  
 import android.view.View;  
 import android.widget.Button;  
 import android.widget.Toast;  
 public class MainActivity extends AppCompatActivity {  
   private Button button;  
   private Boolean isServiceStarted = false;  
   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_main);  
     button = (Button)findViewById(R.id.button);  
     button.setOnClickListener(new View.OnClickListener() {  
       @Override  
       public void onClick(View v) {  
         if(isServiceStarted){  
           Intent serviceIntent = new Intent(getApplicationContext(),MyService.class);  
           stopService(serviceIntent);  
           isServiceStarted = false;  
           button.setText("START SERVICE");  
         } else {  
           Intent serviceIntent = new Intent(getApplicationContext(),MyService.class);  
           startService(serviceIntent);  
           isServiceStarted = true;  
           button.setText("STOP SERVICE");  
         }  
         }  
     });  
   }  
 }  

MyService.Java

 package com.example.velmurugan.unbindservice;  
 import android.app.Service;  
 import android.content.Intent;  
 import android.os.IBinder;  
 import android.widget.Toast;  
 /**  
  * Created by velmurugan on 6/2/16.  
  */  
 public class MyService extends Service {  
   @Override  
   public IBinder onBind(Intent intent) {  
     return null;  
   }  
   @Override  
   public int onStartCommand(Intent intent, int flags, int startId) {  
     Toast.makeText(getApplicationContext(), "Service started", Toast.LENGTH_SHORT).show();  
     return START_STICKY;  
   }  
   @Override  
   public void onDestroy() {  
     super.onDestroy();  
     Toast.makeText(getApplicationContext(), "Sercvice stoped", Toast.LENGTH_SHORT).show();  
   }  
 }  

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>  
 <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:paddingBottom="@dimen/activity_vertical_margin"  
   android:paddingLeft="@dimen/activity_horizontal_margin"  
   android:paddingRight="@dimen/activity_horizontal_margin"  
   android:paddingTop="@dimen/activity_vertical_margin"  
   tools:context="com.example.velmurugan.unbindservice.MainActivity">  
   <Button  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:text="Start service"  
     android:id="@+id/button"  
     android:layout_centerVertical="true"  
     android:layout_centerHorizontal="true" />  
 </RelativeLayout>  

Download started service example source code

 

Creating a Bound Service in Android Example

MainActivity.Java
 package com.example.velmurugan.bindservice;  
 import android.content.ComponentName;  
 import android.content.Context;  
 import android.content.Intent;  
 import android.content.ServiceConnection;  
 import android.os.IBinder;  
 import android.support.v7.app.AppCompatActivity;  
 import android.os.Bundle;  
 import android.view.View;  
 import android.widget.Button;  
 import android.widget.TextView;  
 import android.widget.Toast;  
 public class MainActivity extends AppCompatActivity {  
   private MyService myService;  
   private Boolean isBound = false;  
   private Button button;  
   private TextView textView;  
   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_main);  
     button = (Button)findViewById(R.id.button);  
     textView = (TextView)findViewById(R.id.textView);  
     button.setOnClickListener(new View.OnClickListener() {  
       @Override  
       public void onClick(View v) {  
         textView.setText(myService.getTime());  
       }  
     });  
   }  
   @Override  
   protected void onStart() {  
     super.onStart();  
     if(!isBound){  
       bindService(new Intent(getApplicationContext(),MyService.class),connection, Context.BIND_AUTO_CREATE);  
     }  
   }  
   @Override  
   protected void onStop() {  
     super.onStop();  
     if(isBound){  
       unbindService(connection);  
     }  
   }  
   private ServiceConnection connection = new ServiceConnection() {  
     @Override  
     public void onServiceConnected(ComponentName name, IBinder service) {  
       MyService.MyBinder iBinder = (MyService.MyBinder)service;  
       myService = iBinder.getServiceInstance();  
       Toast.makeText(getApplicationContext(),"Service connected",Toast.LENGTH_SHORT).show();  
     }  
     @Override  
     public void onServiceDisconnected(ComponentName name) {  
       Toast.makeText(getApplicationContext(),"Service Disconnected",Toast.LENGTH_SHORT).show();  
     }  
   };  
 }  

MyService.Java

 package com.example.velmurugan.bindservice;  
 import android.app.Service;  
 import android.content.Intent;  
 import android.os.Binder;  
 import android.os.IBinder;  
 import android.support.annotation.Nullable;  
 import java.util.Calendar;  
 /**  
  * Created by velmurugan on 6/2/16.  
  */  
 public class MyService extends Service{  
   public final IBinder myBinder = new MyBinder();  
   public class MyBinder extends Binder{  
     MyService getServiceInstance(){  
       return MyService.this;  
     }  
   }  
   @Override  
   public IBinder onBind(Intent intent) {  
     return myBinder;  
   }  
   public String getTime(){  
     return Calendar.getInstance().getTime().toString();  
   }  
 }  

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>  
 <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:paddingBottom="@dimen/activity_vertical_margin"  
   android:paddingLeft="@dimen/activity_horizontal_margin"  
   android:paddingRight="@dimen/activity_horizontal_margin"  
   android:paddingTop="@dimen/activity_vertical_margin"  
   tools:context="com.example.velmurugan.bindservice.MainActivity">  
   <Button  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:text="Show Time"  
     android:id="@+id/button"  
     android:layout_centerVertical="true"  
     android:layout_centerHorizontal="true" />  
   <TextView  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:textAppearance="?android:attr/textAppearanceLarge"  
     android:id="@+id/textView"  
     android:layout_alignParentBottom="true"  
     android:layout_centerHorizontal="true" />  
 </RelativeLayout>  

Download bound service example source code

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top