码迷,mamicode.com
首页 > 其他好文 > 详细

Service

时间:2015-03-01 08:56:20      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

Service的生命周期


onCreate  onStart  onDestroy  onBind


1). 被启动的服务的生命周期:如果一个Service被某个Activity 调用 Context.startService 方法启动,那么不管是否有Activity使用bindService绑定或unbindService解除绑定到该Service,该Service都在后台运行。如果一个ServicestartService 方法多次启动,那么onCreate方法只会调用一次,onStart将会被调用多次(对应调用startService的次数),并且系统只会创建Service的一个实例(因此你应该知道只需要一次stopService调用)。该Service将会一直在后台运行,而不管对应程序的Activity是否在运行,直到被调用stopService,或自身的stopSelf方法。当然如果系统资源不足,android系统也可能结束服务。


2). 被绑定的服务的生命周期:如果一个Service被某个Activity 调用 Context.bindService 方法绑定启动,不管调用 bindService 调用几次,onCreate方法都只会调用一次,同时onStart方法始终不会被调用。当连接建立之后,Service将会一直运行,除非调用Context.unbindService 断开连接或者之前调用bindService Context 不存在了(如Activityfinish的时候),系统将会自动停止Service,对应onDestroy将被调用。


3). 被启动又被绑定的服务的生命周期:如果一个Service又被启动又被绑定,则该Service将会一直在后台运行。并且不管如何调用,onCreate始终只会调用一次,对应startService调用多少次,ServiceonStart便会调用多少次。调用unbindService将不会停止Service,而必须调用 stopService ServicestopSelf 来停止服务。


4). 当服务被停止时清除服务:当一个Service被终止(1、调用stopService2、调用stopSelf3、不再有绑定的连接(没有被启动))时,onDestroy方法将会被调用,在这里你应当做一些清除工作,如停止在Service中创建并运行的线程。



特别注意:


1、你应当知道在调用 bindService 绑定到Service的时候,你就应当保证在某处调用 unbindService 解除绑定(尽管 Activity finish 的时候绑定会自动解除,并且Service会自动停止);


2、你应当注意 使用 startService 启动服务之后,一定要使用 stopService停止服务,不管你是否使用bindService


3、同时使用 startService bindService 要注意到,Service 的终止,需要unbindServicestopService同时调用,才能终止 Service,不管 startService bindService 的调用顺序,如果先调用 unbindService 此时服务不会自动终止,再调用 stopService 之后服务才会停止,如果先调用 stopService 此时服务也不会终止,而再调用 unbindService 或者 之前调用 bindService Context 不存在了(如Activity finish 的时候)之后服务才会自动停止;


4、当在旋转手机屏幕的时候,当手机屏幕在“横”“竖”变换时,此时如果你的 Activity 如果会自动旋转的话,旋转其实是 Activity 的重新创建,因此旋转之前的使用 bindService 建立的连接便会断开(Context 不存在了),对应服务的生命周期与上述相同。


5、在 sdk 2.0 及其以后的版本中,对应的 onStart 已经被否决变为了 onStartCommand,不过之前的 onStart 任然有效。这意味着,如果你开发的应用程序用的 sdk 2.0 及其以后的版本,那么你应当使用 onStartCommand 而不是 onStart




按使用方式可以分为以下三种:


1startService 启动的服务:主要用于启动一个服务执行后台任务,不进行通信。停止服务使用stopService


2bindService 启动的服务:该方法启动的服务可以进行通信。停止服务使用unbindService


3startService 同时也 bindService 启动的服务:停止服务应同时使用stopServiceunbindService

Service

标签:

原文地址:http://www.cnblogs.com/lin-lin/p/4306584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!