初學Android,建立,啟動,停止Service(五十八)
阿新 • • 發佈:2018-12-18
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,一個用來停止Servicepackage 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方法