由于不是经常的使用某些Android知识,总是经常忘掉。我想再次从基础开始整理一些基础性的但是很关键的知识。
下面我要说的是就是service,service是Android的四大组件之一,用的时候同样需要注册,跟activity一样,同样继承自context上下文。它就像一个看不见的activity。没有ui界面,我们知道,服务是为了在后台做一些事情,比如一些执行时间较长的操作。
启动service的方式有两种,一种是通过startService(),另一种是绑定service,这两种方式service所走 的生命周期是不一样的,第一种,当通过start的方式启动的时候,service的生命周期分别是,onCreate(); onStartCommand()和onDestory()方法,其中onCreate方法只有在第一次创建的时候才被调用,也就是第一次执行startService(intent)方法时调用一次,onStartCommand()方法是在每次调用startService(intent)都会执行一次,onDestory()是在服务销毁的时候才执行。
注意:当通过startService将service启动的时候,如果你没有在进程销毁的时候调用stopService方法,当你把进程杀死的时候,不久之后进程会自己启动起来。
当包含service的进程意外终止的时候,service是不会继续往下走生命周期的,但是当正常之后,service还是会自启动,同时走生命周期onCreate跟onStartCommand方法。
startService对应的是service生命周期中的onCreate跟onStartCommand两个方法,stopService对应的是service生命周期中的onDestory方法
这种方式当Activity启动Service,Activity销毁掉,service不受任何影响
当通过绑定的方式启动service的时候,service有onBind,onCreate,onUnbind,onDestory四个生命周期方法。
当执行bindService方法时,sevice的生命周期是onCreate和onBind方法 。这个时候,如果,对MainActivity执行一个back操作,销毁Activity,service会走onUnbind和onDestory方法,也就是,绑定service的宿主Activity死了,service跟着也解绑销毁掉了
当Activity先StartService了然后又调用了bindService,这时因为startService的时候Service已经创建起来了,所以其生命周期是onCreate,onStartCommand,和onBind方法
此时,此时,我把Activity销毁掉的话,service只会执行onUnbind方法,而不会执行onDestory方法。那是因为一开始我用startService将service启动过了。此时,这个service依然会存活着
下面解释一下,bindService方法的几个参数,参数一:就是一个intent,参数二:是一个serviceConnection,当服务绑定成功的时候, 用于接收Service的onBind生命周期方法的返回值IBinder的,我们在使用的时候,因为解绑的时候也要用到这个serviceConnection对象,所以我们要声明一下
在自定义的MyServiceConnection类里,第一个方法就是监听绑定service成功时执行的方法,第二个方法就是服务意外终止、断开连接的时候被系统回调的方法
当Activity调用unBindService方法时,Service会执行onbnbind和onDestory方法,此时如果你再次调用unbindService的时候,系统就会报异常