1. 程式人生 > >初學Android,建立,啟動,停止Service(五十八)

初學Android,建立,啟動,停止Service(五十八)

               

Service跟Windows系統裡的服務概念差不多,都在後臺執行,它跟Activity的最大區別就是,它是無介面的

開發Service與開發Activity的步驟類似

1.定義一個繼承Service的子類

2.在AndroidManifest.xml檔案中配置該Service

Service與Activity還有一點相似之處,它們都是從Context派生出來的,因此它們都可呼叫Context裡定義的如getResources(),getContentResolver()等方法

下面寫一個簡單的Service例子

先定義一個Service類

package WangLi.IO.FirstService;import
android.app.Service;import android.content.Intent;import android.os.IBinder;public class FirstService extends Service {    //必須實現的方法 @Override public IBinder onBind(Intent intent) {  // TODO Auto-generated method stub  return null; } //Service被建立時回撥方法 public void OnCreate() {  super.onCreate();  System.out.print("Service is Created"
); }  //Service啟動時回撥該方法 public int onStartCommand(Intent intent,int flags,int startId) {  System.out.println("Service is Started");  return START_STICKY; }  //Service被關閉之前被回撥 public void onDestroy() {  super.onDestroy();  System.out.println("Service is Destroyed"); }}
上面幾個關鍵方法都可以看到,Service的執行就在方法內寫上相應的功能程式碼,在不同階段執行

Service跟Activity一樣,也需要在AndroidManifest.xml檔案中註冊,註冊配置配置<intent-filter.../>子元素,設定Service可被哪些Intent啟動

        <service android:name="FirstService" >            <intent-filter>                <action android:name="WangLi.IO.First_Service"></action>            </intent-filter>        </service>
建一個介面類Activity,放上兩個按鈕,一個用來啟動Service,一個用來停止Service
package WangLi.IO.FirstService;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;public class MainActivity extends Activity { Button start, stop; @Override public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  // 獲取介面上的start,stop兩個按鈕  start = (Button) findViewById(R.id.start);  stop = (Button) findViewById(R.id.stop);  // 建立啟動Service的Intent  final Intent intent = new Intent();  // 為Intent設定Action屬性  intent.setAction("WangLi.IO.First_Service");  start.setOnClickListener(new OnClickListener() {   @Override   public void onClick(View arg0) {    // 啟動指定Service    startService(intent);   }  });  stop.setOnClickListener(new OnClickListener() {   @Override   public void onClick(View v) {    // 停止指定Service    stopService(intent);   }  }); }}
注意startService,和stopService這兩個方法

下面是程式介面

下面logcat記錄的Service啟動和關閉過程

此外,有一點值得注意,多次啟動一個已有的Service元件將不會再呼叫onCreate方法,但每次啟動時都會回撥onStart方法