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 application is destroyed. A service can
essentially take two states −
A service has life 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 life
cycle when the service is created with startService() and the diagram on the
right shows the life cycle when the service is created with bindService(): (image
courtesy : android.com )
To create an service, you create a Java class
that extends the Service base class or one of its existing subclasses. The Servicebase 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.
actvity_main.xml
-----------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.android.anil.services.MainActivity"
tools:showIn="@layout/activity_main"
android:orientation="vertical">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Start Service"
android:id="@+id/button"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Stop Service"
android:id="@+id/button2"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.android.anil.services.MainActivity"
tools:showIn="@layout/activity_main"
android:orientation="vertical">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Start Service"
android:id="@+id/button"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Stop Service"
android:id="@+id/button2"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp" />
</LinearLayout>
MainActvity.Java
----------------------
package
com.android.anil.services;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button startser,stopser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
startser=(Button)findViewById(R.id.button);
stopser=(Button)findViewById(R.id.button2);
startser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),MyServices.class);
startService(intent);
}
});
stopser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),MyServices.class);
stopService(intent);
}
});
}
}
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button startser,stopser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
startser=(Button)findViewById(R.id.button);
stopser=(Button)findViewById(R.id.button2);
startser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),MyServices.class);
startService(intent);
}
});
stopser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),MyServices.class);
stopService(intent);
}
});
}
}
MyServices.Java
---------------------------
package
com.android.anil.services;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;
/**
* Created by Anil on 11/23/15.
*/
public class MyServices extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(MyServices.this, "Services is Created()", Toast.LENGTH_SHORT).show();
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(MyServices.this, "Services is Running.........", Toast.LENGTH_SHORT).show();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Toast.makeText(MyServices.this, "Services is Stopped", Toast.LENGTH_SHORT).show();
super.onDestroy();
}
}
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;
/**
* Created by Anil on 11/23/15.
*/
public class MyServices extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(MyServices.this, "Services is Created()", Toast.LENGTH_SHORT).show();
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(MyServices.this, "Services is Running.........", Toast.LENGTH_SHORT).show();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Toast.makeText(MyServices.this, "Services is Stopped", Toast.LENGTH_SHORT).show();
super.onDestroy();
}
}
AndroidManifest.xml
------------------------------
Output is:
------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.anil.services">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyServices"></service>
</application>
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.anil.services">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyServices"></service>
</application>
</manifest>
---------------------------