Services are of two categories
- Unbound Services – They are services that run in background indefinitely. That is, unbound service is one which gets initiated when an activity is started and continues to run even when that activity is closed.
- Bound Services – They are services that run in background at the lifespan of a calling activity. That is, bound service is one which gets initiated when an activity is started and destroys or its life span ends when that activity is closed.
Here is an example of unbound service that will be initiated by an application activity and even after that activity is closed, will find the service to be running in background.
layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:gravity="center">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="Activity UnBound Services Demo"
android:textSize="20sp" android:padding="10dp" />
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content" android:id="@+id/buttonStart"
android:text="Create/Start UnBound Service"></Button>
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="Stop UnBound Service" android:id="@+id/buttonStop">
</Button>
</LinearLayout>
SimpleActivityUnBoundService.java
package in.satworks.android.samples.service;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class SimpleActivityUnBoundService extends Service {@Override
public IBinder onBind(Intent arg0) { return null;
}
@Override
// Service Created - Called only one time when when the service is first created
public void onCreate() {super.onCreate();
Toast.makeText(this, "Service onCreate called: Service Created", 3).show();}
@Override
// Service Stopped - Called when the service is destroyed
public void onDestroy() {super.onDestroy();
Toast.makeText(this, "Service onDestroy called: Service Stopped", 3).show();}
@Override
// Service Started - Called every time when user tries to start the same service
public void onStart(Intent intent, int startId) {super.onStart(intent, startId);
Toast.makeText(this, "Service onStart called: Service Started", 3).show();}
}
ServiceDemoActivity.java
package in.satworks.android.samples.activity;
import in.satworks.android.samples.R;
import in.satworks.android.samples.service.SimpleActivityUnBoundService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class ServiceDemoActivity extends Activity implements OnClickListener{
Button buttonStart, buttonStop;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStop = (Button) findViewById(R.id.buttonStop);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonStart:
startService(new Intent(this, SimpleActivityUnBoundService.class));
break;
case R.id.buttonStop:
stopService(new Intent(this, SimpleActivityUnBoundService.class));
break;
}
}
@Override protected void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Calling Activity Destoyed", 3).show();
}
}
values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ServiceDemoApp</string>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.satworks.android.samples" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".activity.ServiceDemoActivity" 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:enabled="true" android:name=".service.SimpleActivityUnBoundService" />
</application>
<uses-sdk android:minSdkVersion="8" />
</manifest>
Working with Bound Services:
Here is an example of bound service that will be initiated by an application activity and its lifecycle ends when the activity is closed.
layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:gravity="center">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="Activity Bound Services Demo"
android:textSize="20sp" android:padding="10dp" />
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content" android:id="@+id/buttonStart"
android:text="Start"></Button>
</LinearLayout>
SimpleActivityBoundService.java
package in.satworks.android.samples.service;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class SimpleActivityBoundService extends Service { @Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override // Service Created - Called only one time when when the service is first created
public void onCreate() {
super.onCreate();
Toast.makeText(this, "Service onCreate called: Service Created", 3).show();
}
@Override // Service Stopped - Called when the service is destroyed
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service onDestroy called: Service Stopped", 3).show();
}
}
ServiceDemoActivity.java
package in.satworks.android.samples.activity;import in.satworks.android.samples.R;
import in.satworks.android.samples.service.SimpleActivityBoundService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class ServiceDemoActivity extends Activity implements OnClickListener{
Button buttonStart;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStart.setOnClickListener(this);
}
@Override public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonStart:
bindService(new Intent(this, SimpleActivityBoundService.class), null, BIND_AUTO_CREATE);
break;
}
}
@Override protected void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Calling Activity Destroyed", 3).show();
}
}
values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ServiceDemoApp</string>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.satworks.android.samples" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".activity.ServiceDemoActivity" 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:enabled="true" android:name=".service.SimpleActivityBoundService" />
</application>
<uses-sdk android:minSdkVersion="8" />
</manifest>
No comments:
Post a Comment