Service的简单介绍

 

一、为何不使用后台线程而使用Service?android


1)、Service能够放在独立的进程中,因此更安全;
2)、使用Service能够依赖现有的binder机制,不须要在应用层面上处理线程同步的繁杂工做;
3)、系统能够从新启动异常死去的Service。安全

二、 Service 与 Activity 的相同点与不一样点:spa


不一样点:Activity是与用户交互的组件,便可以看到UI界面,而Service是在后台运行、无需界面;
相同点:使用Activity 时咱们须要在配置文件中声明<activity>标签,一样的使用Service 也须要在配置文件中声明<service>
标签。
都具备必定的生命周期。线程


启动service有两种方法:orm


1)、 Context.startService()
调用者与服务之间没有关联,即便调用者退出,服务仍可运行对象

Started Service的生命周期:
onCreate():建立服务
onStartCommand():服务开始运行(在2.0之前版本中,使用onStart()回调方法)
onDestroy() :服务被中止接口

【详细说明:】生命周期

在程序中调用: context.startService() 会触发执行Service生命周期中的onCreate()、onStartCommand()回调方法,进程

此时服务就开始正式运行;若是Service尚未运行,则android先调用onCreate()而后调用onStartCommand();同步

若是Service已经运行,则只调用onStartCommand(),因此一个Service的onStartCommand方法可能会重复调用屡次;
若是在程序中调用:context.stopService()会触发执行Service生命周期中的onDestroy()回调方法,会让服务中止;
stopService()的时候直接onDestroy,若是是调用者本身直接退出而没有调用stopService()的话,Service会一直在后台运行。
该Service的调用者再启动该Service后能够经过stopService关闭Service;stopSelf()
因此StartService的生命周期为:onCreate --> onStartCommand(可屡次调用) --> onDestroy。

 

 

=====================

 

 


2)、 Context.bindService()
调用者与服务绑定在一块儿,调用者一旦退出,服务也就终止


Bound Service的生命周期:
onCreate():建立服务
onBind():绑定服务,服务开始运行
onUnbind():取消绑定
onDestroy() :服务被中止

 

 

【详细说明:】
在程序中调用:context.bindService()会触发执行Service生命周期中的onCreate()、onBind()回调方法,
此时服务开始运行;onBind将返回给客户端一个IBind接口实例,IBind容许客户端回调服务的方法,
好比获得Service运行的状态或其余操做。此后调用者(Context,例如Activity)会和Service绑定在一块儿;
若是调用Service的调用者Context退出了,那么会依次调用Service生命周期中的onUnbind()、onDestroy()回调方法,
会让服务中止;因此BindService的生命周期为:onCreate --> onBind(只一次,不可屡次绑定) --> onUnbind --> onDestory。

===================================

 

 


根据启动方式将本地服务分为:启动服务Started Service绑定服务Bound Service。【重点】


Started Service:被启动的服务被启动的服务是由其它组件调用startService()方法而启动的,
该方法会致使被启动服务的生命周期方法onStartCommand()被回调。当服务是被启动状态后,
其生命周期与启动它的组件无关,即便启动服务的组件(Activity,BroadcastReceiver)
已经被销毁,该服务还能够在后台无限期运行。除非调用stopSelf()或stopService()来中止该服务。

 

 


Bound Service:被绑定的服务绑定服务是容许其它应用程序绑定而且与之交互的Service的实现类。

为了提供绑定,必须实现onBind()回调方法。该方法返回IBinder对象,它定义了服务类与Activity交互的程序接口。
Activity经过bindService()方法绑定到服务类,同时Activity必须提供ServiceConnection接口的实现类,
它监视Activity与服务类之间的链接。在重写ServiceConnection接口的onServiceConnected()方法时,
实现了将服务类顺利赋值到了Activity中,实现了在Activity中使用该服务类并执行其中的方法。

 

 

 

【 备注: 】
Service是不能本身启动的,只有经过 Context 对象调用startService() bindService() 方法来启动。
在Service每一次的开启关闭过程当中,只有onStartCommand()可被屡次调用(经过屡次startService调用),其余
onCreate()、onBind()、onUnbind()、onDestory()在一个生命周期中只能被调用一次

相关文章
相关标签/搜索