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.

相关文章
相关标签/搜索