志在指尖
用双手敲打未来

Service基础知识

1.Service基础知识
1.1Service是什么?
Service(服务)是一个一种能够在后台履行长时间运转操作而没有用户界面的组件。它运转于UI线程,因而不能进行耗时的操作。
1.2Service和Thread的差异
Service的运转是在UI线程当中的,是绝对绝对不能进行耗时操作的,而Thread敞开的子线程则能够进行耗时操作,可是Thread敞开的子线程是不能直接对UI进行操作的,否则极有或许发生直接让程序崩掉,这便是它们的差异。
2.发动Service的2种办法
2.1startService()办法敞开Service
过程:
a.界说一个类承继Service。
b.在AndroidManifest.xml文件中装备该Service。
c.运用Context的startService(Intent)办法发动该Service。
d.不再运用该Service时,调用Context的stopService(Intent)办法中止该Service。
2.2bindService办法敞开Service(Activity与Service绑定)Service基础知识
过程:
a.创建BinderService服务端,承继自Service并在类中创建一个完成IBinder接口的完成实例目标并供给公共办法给客户端调用。
b.从onBind()回调办法回来此Binder实例。
c.在客户端中,从onServiceConnected回调办法接纳Binder,并运用供给的办法调用绑定服务。
3.Service的生命周期
服务的生命周期有两种,因为服务能够跟Activity绑定起来,也能够不绑定,Activity和服务进行通讯的话,是需求把服务和Activity进行绑定的。因而服务的生命周期分为未绑定Activity的和绑定Activity的。
没有绑定Activity的服务生命周期:
发动服务>onCreate()>onStartCommand()>服务运转>onDestory()>服务毁掉
绑定Activity的服务生命周期
绑定服务>onCreate()>onBind()>服务运转>onUnBind()>onDestory()>服务被毁掉
经过Intent和startService()办法发动了一个服务,接下来履行onCreate()办法,初次创建服务时,体系将调用此办法来履行一次性设置程序(在调用onStartCommand()或onBind()之前)。假如服务已在运转,则不会调用此办法。
当另一个组件(如Activity)经过调用startService()恳求发动服务时,体系将调用此办法。一旦履行此办法,服务即会发动并可在后台无限期运转。假如您完成此办法,则在服务作业完成后,需求由您经过调用stopSelf()或stopService()来中止服务。(假如您只想供给绑定,则无需完成此办法。)
服务开端处于运转状态。
某个操作导致服务中止,比方履行了办法stopService(),那么服务接下来会履行onDestory()毁掉。服务应该完成此办法来整理一切资源,如线程、注册的侦听器、接纳器等。这是服务接纳的最后一个调用。
服务被完全毁掉,下一步便是等候被废物回收器回收了。
经过Intent和bindService()办法发动了一个服务,接下来会履行onCreate()办法,初次创建服务时,体系将调用此办法来履行一次性设置程序(在调用onStartCommand()或onBind()之前)。假如服务已在运转,则不会调用此办法。
当另一个组件想经过调用bindService()与服务绑定(例如履行RPC)时,体系将调用此办法。在此办法的完成中,您必须经过回来IBinder供给一个接口,供客户端用来与服务进行通讯。请务必完成此办法,但假如您并不期望答应绑定,则应回来null。
服务开端处于运转状态。成功与Activity绑定。
某个操作导致服务免除绑定,比方履行了办法unbindService(),那么服务接下来会免除与当前Activity的绑定。接下来服务将面对毁掉。
服务履行onDestory()办法被毁掉。服务应该完成此办法来整理一切资源,如线程、注册的侦听器、接纳器等。这是服务接纳的最后一个调用。
服务被完全毁掉,下一步便是等候被废物回收器回收了。
Service总结:
被发动的服务的生命周期:假如一个Service被某个Activity调用Context.startService办法发动,那么不论是否有Activity运用bindService绑定或unbindService免除绑定到该Service,该Service都在后台运转。假如一个Service被startService办法多次发动,那么onCreate办法只会调用一次,onStart将会被调用多次(对应调用startService的次数),并且体系只会创建Service的一个实例(因而你应该知道只需求一次stopService调用)。该Service将会一向在后台运转,而不论对应程序的Activity是否在运转,直到被调用stopService,或自身的stopSelf办法。当然假如体系资源不足,android体系也或许结束服务。
被绑定的服务的生命周期:假如一个Service被某个Activity调用Context.bindService办法绑定发动,不论调用bindService调用几次,onCreate办法都只会调用一次,同时onStart办法始终不会被调用。当衔接树立之后,Service将会一向运转,除非调用Context.unbindService断开衔接或者之前调用bindService的Context不存在了(如Activity被finish的时分),体系将会主动中止Service,对应onDestroy将被调用。
被发动又被绑定的服务的生命周期:假如一个Service又被发动又被绑定,则该Service将会一向在后台运转。并且不论如何调用,onCreate始终只会调用一次,对应startService调用多少次,Service的onStart便会调用多少次。调用unbindService将不会中止Service,而必须调用stopService或Service的stopSelf来中止服务。
当服务被中止时铲除服务:当一个Service被停止(1、调用stopService;2、调用stopSelf;3、不再有绑定的衔接(没有被发动))时,onDestroy办法将会被调用,在这里你应作为一些铲除作业,如中止在Service中创建并运转的线程。

未经允许不得转载:IT技术网站 » Service基础知识
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载