android service 之一 (start service) – Android移動開發技術文章_手機開發 Android移動開發教學課程

 

我們有兩種方式(start與bind)啟動一個Service,每一種方式啟動的Service生命周期是不一樣的,這篇貼子主要寫的是start service。

它的生命周期中隻有三個階段:onCreate, onStartCommand(取代原來的onStart方法), onDestroy。如下圖:

 

 

需要註意的有:

① 如果是 調用者 直接退出而沒有調用stopService 的話,那麼被啟動的Service 會一直在後臺運行,直至其stopService 方法被調用,或者它自己調用stopSelf 方法。

② 在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onStartCommand()方法。如果調用startService()方法前服務已經被創建,那麼會直接調用onStartCommand()方法。也就是說,多次調用startService()方法並不會導致多次創建服務。另外,不管被start 多少次,隻需一次stop 便可將相應的service關閉。

③ 具體的操作應該放在onStartCommand() 裡面

以下通過截圖來看:

 

上圖的中的四個按鈕均是針對於同一個Service進行的操作,此時去application ,可以查看到"Running Service" 的列表如下:

 

 

 

這個,我們去點擊上面的按鈕(分別點擊startservice 1 和2 各兩次),結果如下:

 

 從圖中,我們可以看出,onCreate() 方法隻在第一次創建服務的時候被調用瞭。

現在,通過“返回鍵”來退回至主界面,然後再去application 的running service中去查看,可得下面的截圖:

 

 從此圖中,我們可以看出,雖然Activity被finish掉瞭,但是由它啟動的service仍然在後臺運行著。

此時,重新打開該應用,然後直接點擊stop service 1 和2 按鈕各兩次(不需再新點擊start service按鈕),可以如下截圖:

 

 從此圖中我們可以看出,隻有第一次停止服務的時候,才會調用onDestroy() 方法。

此時,再去application 的running service中去查看,可得下面的截圖,發現服務確實已經被停止瞭:

 

 

下面附上部分源碼(具體地請參見附件):

Java代碼 

// 四個按鈕的響應事件 

 

private OnClickListener btnListener = new OnClickListener() { 

        @Override 

        public void onClick(View v) { 

            switch (v.getId()) { 

                case R.id.startSer1: 

                    updateLog("Start Service 1 pressed"); 

                     // 啟動服務(如果想傳遞數據,也可以將其封裝進該intent) 

                    startService(intent); 

                    break; 

                case R.id.startSer2: 

                    updateLog("Start Service 2 pressed"); 

                    startService(intent); 

                    break; 

                case R.id.stopSer1: 

                    updateLog("Stop Service 1 pressed"); 

                    // 停止服務 

                    stopService(intent); 

                    break; 

                case R.id.stopSer2: 

                    updateLog("Stop Service 2 pressed"); 

                    stopService(intent); 

                    break; 

                default: 

                    break; 

            } 

        } 

    }; 

 

Java代碼 

// service 的實現 

public class MyService extends Service { 

    private static final String TAG = "MyService"; 

 

    @Override 

    public void onCreate() { 

        super.onCreate(); 

        MyServiceActivity.updateLog(TAG + " —-> onCreate()"); 

    } 

 

    @Override 

    public int onStartCommand(Intent intent, int flags, int startId) { 

        MyServiceActivity.updateLog(TAG + " —-> onStartCommand()"); 

        return START_STICKY; 

    } 

 

    @Override 

    public IBinder onBind(Intent intent) { 

        MyServiceActivity.updateLog(TAG + " —-> onBind()"); 

        return null; 

    } 

 

    @Override 

    public void onDestroy() { 

        super.onDestroy(); 

        MyServiceActivity.updateLog(TAG + " —-> onDestroy()"); 

    } 

    

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *