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

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

Service和Activity不在一個工程裏面,也即不在一個App裏面。不在一個進程裏,因此會用到AIDL。app

Service的android:process屬性未指定。進程

1、startService

一、經過調用startService啓動服務的過程:it

onCreate —》onStartCommand —》onStartio

startService 僅用於啓動服務,若是Activity須要與Service進行通訊,需利用Broadcast。ast

二、然後,屢次調用startService,服務會屢次執行:test

onStartCommand —》onStart總結

三、屢次調用startService後,調用一次stopService便可結束服務。(若屢次調用stopService,只有第一次有用)通信

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

—》onDestroy

另外,

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

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

 

2、bindService

一、經過調用bindService啓動服務的過程:

onCreate —》onBind  —》(onServiceConnected)

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

二、屢次調用bindService,服務自己未執行任何操做。

三、因此一次unBindService就能結束服務。(若屢次調用unBindService,第一次有用,後面會出錯)

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

onUnbind —》onDestroy

3、先startService,後bindService

一、先調用startService,後調用bindService。服務的執行過程爲:

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

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

onUnbind —》onDestroy

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

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

onUnbind —》onDestroy

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

4、先bindService,後startService

一、先調用startService,後調用bindService。服務的執行過程爲:

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

二、先unBindService,後stopService。

服務執行的過程同 三。

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

服務執行的過程同 三。

5、總結

一、屢次bindService時,服務自己的onBind不會被屢次執行。

二、bind上一個Service後,執行一次unBindService就夠了。否則會出錯。

三、一個App裏,同一個Activity屢次bind一個服務,除了第一次,後面的bind不會有任何onBind、onServiceConnected打印。

    一個App裏,不一樣的Activity去bind一個服務,第一次bind有onBind、onServiceConnected打印,後面的bind只會有onServiceConnected打印。

四、一個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.

相關文章
相關標籤/搜索