Service详解

Service组件详解.png

生命周期

service的生命周期相对activity来说比较简单,一个servcie的生命周期从创建到销毁有两条路径:

  • started servcie
    当其他的组件调用startService()时候service被创建,之后这个service一直运行直到它自己调用stopSerlf()或者其他的组件调用stopService()
  • bound servcie
    当前他组件调用bindServcie的时候service被创建,client可以IBinder接口和service通信,client也可以通过调用unbindService()来关闭连接,多个client可以绑定到同一个service,只有当所有的clint都解绑service之后,系统才会销毁service。这种情况下service不需要stop它自己。
  • 这两种路径并不是完全独立的,你可以绑定一个已经started的service,例如你可以通过调用startService()来启动一个后台service播放音乐。然后你可以通过调用bindService()来使activity绑定这个service,用户就可以控制播放器的播放以及获得当前音乐相关的信息。这种情况下stopService()和stopSelf()不能真正销毁这个service,除非所有的clinets接触绑定。
service_lifecycle.png

如需了解Bound Service的详细信息,请参阅 Bound Service详解

基本知识点细节

  1. 同一个Service,onCreate()和onDestroy()只会走一遍。
  2. 每次调用onStartService()方法,都会回调onStartCommand(Intent intent, int flags, int startId)方法。
  3. bindService()方法的回调onServiceConnected()是异步的。
  4. 只有第一次调用bindService()方法会回调onBind(Intent intent)的方法。
  5. 同一个Activity实例多次重复调用bindService()方法,只会创建一次连接(只会bind一次),也就是只有第一次会回调onServiceConnected()方法。
  6. 如果某个Activity已经bindService了,必须在Activity.onDestory()生命周期或之前unbindService,否则抛出以下异常:
${ActivityName} has leaked ServiceConnection ${ServiceConnectionName} that was originally bound here
  1. 只有所有client都调用了unbindService才会走onBind()生命周期回调,如果只是一个bound service,此时才会走onDestroy生命周期。
  2. 如果一个service即使start service又是bound service,只有所有的client都解绑了,在调用stopService或者stopSelf才会走onDestroy生命周期。
  3. 如果Service实现onUnbind返回true,且一个started service 第一次bind之后再unbind,第二次bind时不会走onBind生命周期,而是走onRebind()的生命周期。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Service简介 Service是Android程序中四大基础组件之一,是在后台运行的组件。 Service...
    提升即效率阅读 4,386评论 0 1
  • 上篇我们讲解了Android中的5中等级的进程,分别是:前台进程、可见进程、服务进程、后台进程、空进程。系统会按照...
    徐爱卿阅读 9,268评论 6 33
  • 什么是Service 先看一下google官方的介绍: Service是一个可以在后台执行长时间运行操作而不提供用...
    Cris_Ma阅读 4,170评论 0 0
  • 这篇文章主要是讲解Service 前言:Service非常适用于去执行那些不需要和用户交互而且还要长期运行在后台的...
    李庆雪阅读 11,095评论 2 7
  • onCreate()方法只会在Service第一次被创建的时候调用,如果当前Service已经被创建过了,不管怎样...
    一只好奇的茂阅读 5,891评论 0 18