前言:本文主要讨论启动远程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.