extends IntentService to create your own service
Description
The following code shows how to extends IntentService to create your own service.
Example
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.java2s.myapplication3.app" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="java2s.com"
android:theme="@style/AppTheme" >
<activity
android:name="com.java2s.myapplication3.app.MainActivity"
android:label="java2s.com" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="com.java2s.myapplication3.app.MyService" />
</application>
</manifest>
res\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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
MainActivity.java
package com.java2s.myapplication3.app;
// w ww .java 2s .co m
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
logEvent("CREATE");
}
@Override
public void onStart() {
super.onStart();
logEvent("START");
}
@Override
public void onResume() {
super.onResume();
logEvent("RESUME");
}
@Override
public void onPause() {
super.onPause();
logWarning("PAUSE");
}
@Override
public void onStop() {
super.onStop();
logWarning("STOP");
}
@Override
public void onDestroy() {
super.onDestroy();
logWarning("DESTROY");
}
private void logEvent(String event) {
Intent intent = new Intent(this, MyService.class);
intent.setAction(MyService.ACTION_EVENT);
intent.putExtra(MyService.EXTRA_NAME, event);
startService(intent);
}
private void logWarning(String event) {
Intent intent = new Intent(this, MyService.class);
intent.setAction(MyService.ACTION_WARNING);
intent.putExtra(MyService.EXTRA_NAME, event);
startService(intent);
}
}
OperationsManager.java
package com.java2s.myapplication3.app;
// w w w. j av a2 s . c om
import android.app.IntentService;
import android.content.Intent;
import android.content.IntentFilter;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
public class MyService extends IntentService {
public static final String ACTION_EVENT = "ACTION_EVENT";
public static final String ACTION_WARNING = "ACTION_WARNING";
public static final String ACTION_ERROR = "ACTION_ERROR";
public static final String EXTRA_NAME = "eventName";
private static final String LOGTAG = "EventLogger";
private IntentFilter matcher;
public MyService() {
super("OperationsManager");
matcher = new IntentFilter();
matcher.addAction(ACTION_EVENT);
matcher.addAction(ACTION_WARNING);
matcher.addAction(ACTION_ERROR);
}
@Override
protected void onHandleIntent(Intent intent) {
//Check for a valid request
if(!matcher.matchAction(intent.getAction())) {
Toast.makeText(this, "OperationsManager: Invalid Request", Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.equals(intent.getAction(), ACTION_EVENT)) {
logEvent(intent.getStringExtra(EXTRA_NAME));
}
if(TextUtils.equals(intent.getAction(), ACTION_WARNING)) {
logWarning(intent.getStringExtra(EXTRA_NAME));
}
if(TextUtils.equals(intent.getAction(), ACTION_ERROR)) {
logError(intent.getStringExtra(EXTRA_NAME));
}
}
private void logEvent(String name) {
try {
//Simulate a long network operation by sleeping
Thread.sleep(5000);
Log.i(LOGTAG, name);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void logWarning(String name) {
try {
//Simulate a long network operation by sleeping
Thread.sleep(5000);
Log.w(LOGTAG, name);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void logError(String name) {
try {
//Simulate a long network operation by sleeping
Thread.sleep(5000);
Log.e(LOGTAG, name);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}