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. 停止服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM