Service介绍&生命周期详解

Service介绍

Service 是 Android 四大组件之一,常用来运行在后台进行耗时操作。其它的应用程序组件可以启动一个Service,即使在用户切换到另外一个应用程序后,这个Service还是一直会在后台运行。此外,一个应用程序也可以绑定到一个Service然后使用进程间通信(IPC)方式与Service之间发生交互。例如一个Service可以处理网络事物,播放音乐,读写文件或者读写ContentProvider,所以这些都在后台运行。


Service 的生命周期

说起 Service 的生命周期,就必须提起它的两种启动方式:

  • Context.startService(intent);
    这种情况下的生命周期:
    onCreate()–>onStartCommand() 其实 onStartCommand 内部调用了 onstart,当我们首次使用startService启动一个服务时,系统会实例化一个Service实例,依次调用其onCreate和onStartCommand方法,然后进入运行状态,此后,如果再使用startService启动服务时,不再创建新的服务对象,系统会自动找到刚才创建的Service实例,调用其onStart方法;如果我们想要停掉一个服务,可使用stopService方法,此时onDestroy方法会被调用,需要注意的是,不管前面使用了多个次startService,只需一次stopService,即可停掉服务。

  • Context.bindService(intent);
    在这种模式下,当调用者首次使用bindService绑定一个服务时,系统会实例化一个Service实例,onCreate–>onStartCommand –>onStart–>onBind–>onServiceConnected. 如果此时再次绑定:onStartCommand –>onStart。解绑会调用:onUnbind。解绑之后再次绑定:onStartCommand –>onStart–>onServiceConnected:就是说 oncreate、onBind、onUnBind都只会调用一次,同时onBind必须返回一个实现了IBinder接口类型的实例。

  • 区别
    startService模式下调用者与服务无必然联系,即使调用者结束了自己的生命周期,只要没有使用stopService方法停止这个服务,服务仍会运行;通常情况下,bindService模式下服务是与调用者生死与共的,在绑定结束之后,一旦调用者被销毁,服务也就立即终止。

  • 如果没有解绑就销毁组件,会报出异常。
  • 解绑之后服务依然存在的。
  • 如果解绑之后重新绑定 会调用onServiceConnected,如果没有解绑,一直重复绑定,只会调用onStartCommand –>onStart
  • 如果在没有解绑的情况下stopService,不会调用后ondestroy
  • 如果Service已经停止,再解绑,会调用onUNBind–>onDestroy

图解:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值