1. 程式人生 > >Android中服務的生命週期與兩種方式的區別

Android中服務的生命週期與兩種方式的區別

服務的生命週期跟Activity的生命週期類似。但是生命週期甚至比你關注服務如何建立和銷燬更重要,因為服務能夠在使用者不知情的情況下在後臺執行。

服務的生命週期---從建立到銷燬---可以被分為以下兩個路徑:

1.  啟動型別的服務: onCreate()- >onStartCommand()->Service running--呼叫context.stopService() ->onDestroy()

2.  繫結型別的服務: onCreate()->onBind()->Service running--呼叫>onUnbind() -> onDestroy()

其中繫結服務才可以呼叫服務中的方法

以下是筆者寫的一個demo程式碼:

 1     @Override
 2     public
void onCreate() { 3 System.out.println("服務被建立了concreate"); 4 super.onCreate(); 5 } 6 7 @Override 8 public int onStartCommand(Intent intent, int flags, int startId) { 9 System.out.println("開啟服務 onStartCommand "); 10 return super.onStartCommand(intent, flags, startId);
11 } 12 13 @Override 14 public IBinder onBind(Intent intent) { 15 System.out.println("繫結服務呼叫了 onBind"); 16 return new MyBinder(); 17 } 18 19 @Override 20 public boolean onUnbind(Intent intent) { 21 System.out.println("解綁服務 onUnbind"); 22 return
super.onUnbind(intent); 23 } 24 25 26 @Override 27 public void onDestroy() { 28 System.out.println("服務被銷燬了ondestroy"); 29 super.onDestroy(); 30 } 31

其中onCreate方法已經過時,取而代之的是onStartCommand()

1.  啟動型別的服務

(1) 第一次啟動服務時:

執行了onCreate方法和onStartCommand方法

(2) 再次點選開啟服務:

只會執行onStartCommand方法

(3) 停止服務

執行onDestroy方法

2.  繫結型別的服務

(1) 繫結服務

呼叫了onCreate方法和onBind方法

(2) 解綁服務

先呼叫了onUnBind方法再呼叫onDestroy方法

下圖說明了一個服務的典型回撥方法。儘管這個圖把由startService()方法建立的服務與由bindService()方法建立的服務給分開了,

但是請記住,任何服務,不管它是怎樣啟動的,都可能允許客戶繫結它。

因此用onStartCommand()方法(通過一個客戶端呼叫startService()方法)初始啟動的服務,

依然能夠接收onBind()的呼叫(在客戶端呼叫bindService()方法時)。

圖的左邊顯示了用startService()方法建立服務時的生命週期

圖的右邊顯示了用bindService()方法建立服務時的生命週期

注意: 建議啟動服務的順序,這樣不會出現問題:

1. 開啟服務  --- 保證服務一直後臺執行
2. 繫結服務  --- 可以呼叫服務中的方法
3. 呼叫服務中的方法
4. 解綁服務  --- 這時服務依然後臺執行
5. 停止服務