一、概述
Android中有两种方式开启一个服务,但它们的生命周期有所不同。
二、第一种方式调用startService启动服务:
1、当服务未启动,如果调用startService第一次启动服务会回调方法顺序为:onCreate -> onStart
2、当服务已启动,如果调用startSerivce启动服务只会回调方法为:onStart
3、当服务已启动,如果外部组件调用stopSerivce或内部调用stopSelf或stopSelfResult关闭服务会回调方法为:onDestroy
说明:这种服务不会因为服务创建者销毁而销毁,可能会因为系统内存紧张时被系统强制销毁(可以改变Serivice优先级延长它被销毁的时间)。无论启动多少次服务,只需要调用一次关闭服务就可以关闭服务。
三、第二种方式调用bindService绑定服务:
1、当服务未启动,如果调用bindService第一次绑定服务会回调方法顺序为:onCreate -> onBind -> onServiceConnected
2、当服务已启动,如果服务创建者再次调用bindSerivice不会回调任何方法,而非服务创建者调用bindService第一次绑定服务只会回调方法为:onServiceConnected
3、当服务已启动,如果非服务创建者调用unbindService会解除与之服务的绑定,但不会回调任何方法。而服务创建者调用unbindService会回调方法顺序为:onUnbind ->onDestroy
说明:这种服务会因为服务创建者的销毁而销毁,而且会回调方法顺序为:onUnbind -> onDestroy。无论非服务创建者调用多少次unbindService解除绑定,都不会关闭服务(解除自身与服务的绑定关系)。而只有服务创建者自己调用unbindService才会关闭服务。
注意:如果退出程序时使用System.exit(0)或者Process.killProcess(Process.myPid())方式完全退出,那么以调用startService启动服务的服务会中断然后再重启,以至于会回调方法顺序为:onCreate -> onStart。