The following code shows how to extends IntentService to create your own service.
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 w w . ja va 2 s . 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; //from www.j av a 2s . c o m 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(); } } }