两种Service--本地Service/远程Service
本地service:是和当前应用在同一个进程中的service,彼此之间拥有共同的内存区域,因此对于某些数据的共享特别的方便和简单;
远程service:主要牵扯到不一样进程间的service访问。由于android的系统安全的缘由致使了咱们在不一样的进程间没法使用通常的方式共享数据。在这里android为咱们提供了一个AIDL工具。(android interface description language)android接口描述语言。android
Service生命周期安全
onCreate()->onStart()->onBind()->onUnbind()->onDestroy() :ide
(1)启动/中止方式--startService/stopService
startService(Intent intent):启动一个service
stopService(Intent intent) :中止一个service 工具
(2)绑定/解绑定方式--bindService/unBindService
若是咱们想使用service中的一些数据或者访问其中的一些方法,那么咱们就要经过下面的方法:
public boolean bindService(Intent intent, ServiceConnection conn, int flags) ;
public void unbindService(ServiceConnection conn);spa
conn则是一个表明与service链接状态的类,当咱们链接service成功或失败时,会主动触发其内部的onServiceConnected或onServiceDisconnected方法。若是咱们想要访问service中的数据,能够在onServiceConnected()方法中进行实现 xml
使用Service的步骤对象
(1)继承service类,实现本身的service。
若是想要访问service中的某些值,咱们一般会在Service类中再提供一个继承了Binder的内部类,经过onBind()方法返回给service请求。这里实际上巧妙的利用了内部类可以访问外部类属性的特色。
(2)在androidManifest.xml中进行注册,如:
<!-- service配置开始 -->
<service android:name="MyService"></service>
<!-- service配置结束-->
(3)在activity中进行启动、绑定、解绑或者中止service。
启动/中止(startService/stopService)方式比较简单;下面列出一个Activity绑定/解绑(bindService/unbindService)Service并使用Service中数据的例子。继承
bindService的使用介绍接口
(1)service经过Context.startService()方法开始,经过Context.stopService()方法中止;也能够经过Service.stopSelf()方法或者Service.stopSelfResult()方法来中止本身。只要调用一次stopService()方法即可以中止服务,不管以前它被调用了多少次的启动服务方法。生命周期
(2)客户端创建一个与Service的链接,并使用此链接与Service进行通话,经过Context.bindService()方法来绑定服务,Context.unbindService()方法来关闭服务。多个客户端能够绑定同一个服务,若是Service还未被启动,bindService()方法能够启动服务。
(3)上面startService()和bindService()两种模式是彻底独立的。你能够绑定一个已经经过startService()方法启动的服务。例如:一 个后台播放音乐服务能够经过startService(intend)对象来播放音乐。可能用户在播放过程当中要执行一些操做好比获取歌曲的一些信息,此时 activity能够经过调用bindServices()方法与Service创建链接。这种状况下,stopServices()方法实际上不会中止 服务,直到最后一次绑定关闭。
Service绑定流程
context.bindService() ——> onCreate() ——> onBind() ——> Service running ——> onUnbind() ——> onDestroy() ——> Service stop
(1)onBind()将返回给客户端一个IBind接口实例,IBind容许客户端回调服务的方法,好比获得Service的实 例、运行状态或其余操做。这个时候把调用者(Context,例如Activity)会和Service绑定在一块儿,Context退出 了,Srevice就会调用onUnbind->onDestroy相应退出。
(2)因此调用bindService的生命周期为:onCreate --> onBind(只一次,不可屡次绑定) --> onUnbind --> onDestory。
(3)在Service每一次的开启关闭过程当中,只有onStart可被屡次调用(经过屡次startService调用),其余onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。
(4)这个问题当调用bindService方法后就会回调Activity的onServiceConnected,在这个方法中会向Activity中传递一个IBinder的实例,Acitity须要保存这个实例。在Service中须要建立一个实现IBinder的内部类(这个内部类不必定在Service中实现,但必须在Service中建立它)。在OnBind()方法中需返回一个IBinder实例,否则onServiceConnected方法不会调用。