《 Service具体解释(一):什么是Service》

《 Service具体解释(二):Service生命周期》

《Service具体解释(三):Service的使用》

《Service具体解释(四):绑定服务 与 通信》

《Service具体解释(五):使用Messager进行通信》

《Service具体解释(六):进程间通信-AIDL》

与Activity相似,Service也有自己的生命周期函数,在不同的时刻。系统会调用相应的Service生命周期函数,只是与Activity声明周期相比,Service的声明周期更加简单。我们通过官方给出的一张图片来体会一下:

这里我们总结一下:

1). 被启动的服务的生命周期:假设一个Service被某个Activity 调用 Context.startService 方法启动。那么无论是否有Activity使用bindService绑定或unbindService解除绑定到该Service。该Service都在后台执行。假设一个Service被startService 方法多次启动,那么onCreate方法仅仅会调用一次,onStart将会被调用多次(相应调用startService的次数),而且系统仅仅会创建Service的一个实例(因此你应该知道仅仅须要一次stopService调用)。该Service将会一直在后台执行。而无论相应程序的Activity是否在执行,直到被调用stopService,或自身的stopSelf方法。

当然假设系统资源不足,android系统也可能结束服务。

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

3). 被启动又被绑定的服务的生命周期:假设一个Service又被启动又被绑定。则该Service将会一直在后台执行。而且无论怎样调用。onCreate始终仅仅会调用一次,相应startService调用多少次。Service的onStart便会调用多少次。调用unbindService将不会停止Service。而必须调用 stopService 或 Service的 stopSelf 来停止服务。

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

特别注意:

1、你应当知道在调用 bindService 绑定到Service的时候,你就应当保证在某处调用 unbindService 解除绑定(虽然 Activity 被 finish 的时候绑定会自      动解除。而且Service会自己主动停止);

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

3、同一时候使用 startService 与 bindService 要注意到。Service 的终止,须要unbindService与stopService同一时候调用,才干终止 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。

生命周期方法说明

onStartCommand()

当还有一个组件(如 Activity)通过调用 startService() 请求启动服务时,系统将调用此方法。一旦执行此方法。服务即会启动并可在后台无限期执行。 假设您实现此方法,则在服务工作完毕后。须要由您通过调用 stopSelf() 或 stopService() 来停止服务。(假设您仅仅想提供绑定,则无需实现此方法。)

onBind()

当还有一个组件想通过调用 bindService() 与服务绑定(比如执行 RPC)时,系统将调用此方法。在此方法的实现中,您必须通过返回 IBinder 提供一个接口,供client用来与服务进行通信。请务必实现此方法,但假设您并不希望同意绑定,则应返回 null。

onCreate()

首次创建服务时。系统将调用此方法来执行一次性设置程序(在调用 onStartCommand() 或 onBind() 之前)。假设服务已在执行,则不会调用此方法。

onDestroy()

当服务不再使用且将被销毁时,系统将调用此方法。

服务应该实现此方法来清理全部资源,如线程、注冊的侦听器、接收器等。

这是服务接收的最后一个调用。

最新文章

  1. Vuforia Android 6 Camera Error
  2. ClickOnce部署(1):一些发布方式
  3. 【Solr】数据库数据导入索引库
  4. CSS中font-style的斜体属性Italic oblique的区别
  5. 【poj2891】 Strange Way to Express Integers
  6. Codeforces 711 D. Directed Roads (DFS判环)
  7. VMware Workstation CentOS-6.4-x86_64-minimal 配置网络以及安装JDK和tomcat
  8. C# Unix时间戳转换为时间
  9. wysiwyg editor
  10. RHEL修改主机名和IP
  11. 更新ORACLE数据时遇到锁死情况的处理
  12. android笔试题
  13. C++ 标准模板库(STL)
  14. android网络编程注意事项之一:移动网络下,防止网络超时甚至连接不上,解决办法--为网络请求设置代理
  15. websevice(Web服务)基础
  16. SQL Server Backup & Restore
  17. 《android开发艺术探索》读书笔记(二)--IPC机制
  18. mysql 日志类型
  19. android adb 流程原理代码分析(一)
  20. 使用Jwt为.Net Core SignalR保驾护航

热门文章

  1. chinese hacker-----WriteUp
  2. poj 3264 线段树
  3. 从数组中查看某值是否存在,Arrays.binarySearch
  4. bzoj 1337 最小圆覆盖
  5. VC 调用 Python
  6. 证明 O(n/1+n/2+…+n/n)=O(nlogn)
  7. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 (动态树LCT)
  8. ios 得到目录大小 进率是1000
  9. redhat 6.6 安装 (LVM)
  10. redis分布式锁redisson