Android 兩種啟動Service(遠程)的方式:Bind 與Start


前言:本文主要討論啟動遠程Service。

Service和Activity不在一個工程里面,也即不在一個App里面。不在一個進程里,所以會用到AIDL。

Service的android:process屬性未指定。

一、startService

1、通過調用startService啟動服務的過程:

onCreate —》onStartCommand —》onStart

startService 僅用於啟動服務,如果Activity需要與Service進行通信,需利用Broadcast。

2、而后,多次調用startService,服務會多次執行:

onStartCommand —》onStart

3、多次調用startService后,調用一次stopService即可結束服務。(若多次調用stopService,只有第一次有用)

4、調用stopService的服務結束過程:

—》onDestroy

另外,

Activity的啟動過程:onCreate —》onStart —》onResume

Activity的退出過程:onPause —》onStop —》onDestroy

 

二、bindService

1、通過調用bindService啟動服務的過程:

onCreate —》onBind  —》(onServiceConnected)

bindService 可用於啟動服務,且能使Activity與Service進行通信。

2、多次調用bindService,服務本身未執行任何操作。

3、所以一次unBindService就能結束服務。(若多次調用unBindService,第一次有用,后面會出錯)

4、調用unBindService的服務結束過程:

onUnbind —》onDestroy

三、先startService,后bindService

1、先調用startService,后調用bindService。服務的執行過程為:

onCreate —》onStartCommand —》onStart —》onBind  —》(onServiceConnected)

2、先unBindService,后stopService。服務結束的執行過程:

onUnbind —》onDestroy

需注意的是:unBindService會執行到onUnbind,stopService會執行到onDestroy。

3、先stopService,后unBindService。服務結束的執行過程:

onUnbind —》onDestroy

需注意的是:stopService不會執行任何操作,unBindService會執行到onUnbind—》onDestroy。

四、先bindService,后startService

1、先調用startService,后調用bindService。服務的執行過程為:

onCreate —》onBind  —》(onServiceConnected) —》onStartCommand —》onStart

2、先unBindService,后stopService。

服務執行的過程同 三。

3、先stopService,后unBindService。服務結束的執行過程:

服務執行的過程同 三。

五、總結

1、多次bindService時,服務本身的onBind不會被多次執行。

2、bind上一個Service后,執行一次unBindService就夠了。不然會出錯。

3、一個App里,同一個Activity多次bind一個服務,除了第一次,后面的bind不會有任何onBind、onServiceConnected打印。

    一個App里,不同的Activity去bind一個服務,第一次bind有onBind、onServiceConnected打印,后面的bind只會有onServiceConnected打印。

4、一個Activity bind上一個Service后,如果Activity finish前沒有調用unBind,App會崩潰,Log打印如下:

android.app.ServiceConnectionLeaked: Activity com.example.testactivity1.MainActivity has leaked ServiceConnection

                                             com.example.testactivity1.MainActivity$1@412d9808 that was originally bound here.


免責聲明!

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



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