前言:本文主要討論啓動遠程Service。android
Service和Activity不在一個工程裏面,也即不在一個App裏面。不在一個進程裏,因此會用到AIDL。app
Service的android:process屬性未指定。進程
一、經過調用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
一、經過調用bindService啓動服務的過程:
onCreate —》onBind —》(onServiceConnected)
bindService 可用於啓動服務,且能使Activity與Service進行通訊。
二、屢次調用bindService,服務自己未執行任何操做。
三、因此一次unBindService就能結束服務。(若屢次調用unBindService,第一次有用,後面會出錯)
四、調用unBindService的服務結束過程:
onUnbind —》onDestroy
一、先調用startService,後調用bindService。服務的執行過程爲:
onCreate —》onStartCommand —》onStart —》onBind —》(onServiceConnected)
二、先unBindService,後stopService。服務結束的執行過程:
onUnbind —》onDestroy
需注意的是:unBindService會執行到onUnbind,stopService會執行到onDestroy。
三、先stopService,後unBindService。服務結束的執行過程:
onUnbind —》onDestroy
需注意的是:stopService不會執行任何操做,unBindService會執行到onUnbind—》onDestroy。
一、先調用startService,後調用bindService。服務的執行過程爲:
onCreate —》onBind —》(onServiceConnected) —》onStartCommand —》onStart
二、先unBindService,後stopService。
服務執行的過程同 三。
三、先stopService,後unBindService。服務結束的執行過程:
服務執行的過程同 三。
一、屢次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.