Service是Android操作系统中的一种重要组件,它可以在后台运行并执行一些任务,而且对于不同的启动方式,Service的生命周期会有所不同。
首先,我们来看通过startService方式启动Service。当我们通过调用startService方法启动Service时,Service会经历以下生命周期方法:onCreate、onStart和onDestroy。在Service被创建时会调用onCreate方法,它只会被调用一次,无论我们调用多少次startService方法。接下来,系统会调用onStart方法,我们可以在这里编写我们想要执行的任务逻辑。最后,当我们调用stopService方法停止Service时,系统会调用onDestroy方法,Service会被销毁。
需要注意的是,如果调用者直接退出而没有调用stopService方法,Service会一直在后台运行。下次调用者再启动时,仍然可以调用stopService来停止Service的运行。
与之不同的是,通过bindService方式启动Service时,Service的生命周期会有所不同。在这种方式下,Service只会运行onCreate方法,然后调用者和Service绑定在一起。一旦调用者退出,系统就会先调用Service的onUnbind方法,接着调用onDestroy方法。可以说,通过bindService启动的Service与调用者生死与共。同样地,onCreate方法也只会被调用一次。
需要注意的是,如果我们先bindService再stop的话,是无法停止Service的,我们只能先调用unbindService方法解除绑定,然后再调用stopService方法来停止Service。因此,先调用start还是先调用bind,是有区别的。
在Android中,Service类似于Windows中的服务,它们都是在系统中运行且不容易被用户发现的。一般情况下,服务没有用户操作界面,可以用来开发一些监控程序等。Service不能自己运行,需要通过调用Context的startService或bindService方法来启动。
startService和bindService两个方法都可以用来启动Service,但它们的使用场景略有不同。使用startService方法启动服务时,调用者与服务之间没有关联,即使调用者退出,服务仍然会继续运行。而使用bindService方法启动服务时,调用者与服务绑定在一起,一旦调用者退出,服务也会终止。
如果我们打算使用startService方法启动服务,系统会在服务被创建时先调用onCreate方法,然后调用onStart方法。如果在调用startService方法之前服务已经被创建,多次调用startService方法并不会导致服务的多次创建,但会导致多次调用onStart方法。在通过startService方式启动的服务,只能使用stopService方法结束服务,服务结束时会调用onDestroy方法。
如果我们打算使用bindService方法启动服务,系统会在服务被创建时先调用onCreate方法,然后调用onBind方法。在这种情况下,调用者和服务会绑定在一起,调用者退出时,系统会先调用onUnbind方法,然后调用onDestroy方法。如果在调用bindService方法之前服务已经被绑定,多次调用bindService方法并不会导致多次创建服务和绑定,即onCreate和onBind方法不会被多次调用。如果调用者希望解除与正在绑定的服务的绑定,可以调用unbindService方法,调用该方法也会导致系统调用onUnbind和onDestroy方法。
通过bindService方法会返回一个IBinder接口实例给调用者,该接口允许调用者回调服务的方法,例如获取Service运行的状态或进行其他操作。在这种情况下,调用者会与Service绑定在一起,但每次只能调用一次onBind方法,无法多次绑定。
总结一下,在Service每一次的开启和关闭过程中,只有onStart可以被多次调用,其他的onCreate、onBind、onUnbind、onDestroy在一个生命周期中只会被调用一次。
因为Android中的Service使用了onBind方法去绑定服务,并返回一个IBinder对象进行操作,所以我们在使用bindService方法时,需要首先实现一个Binder对象作为具体的Service对象,才能进行绑定并获取Service中的方法等操作。
与使用startService方法启动服务相关的生命周期方法为:onCreate、onStart和onDestroy。
onCreate方法在服务被创建时调用,它只会被调用一次,无论我们调用多少次startService或bindService方法,服务也只会被创建一次。
onStart方法在服务被启动时调用,可以在这里编写我们想要执行的任务逻辑。
finally
Service是一种重要的组件
不同的启动方式影响Service生命周期
startService方法会经历onCreate、onStart、onDestroy方法
调用startService方法时,Service会在后台一直运行,除非调用stopService方法
bindService方法只会运行onCreate方法,调用者退出时,Service会调用onUnbind、onDestroy方法
需要注意绑定和解绑的顺序,先绑定即无法停止Service,只能先解绑
服务在Android中类似于Windows中的服务
服务没有用户操作界面,可以用于开发监控程序等
服务需要通过startService或bindService方法启动
startService方法启动的服务,调用者与服务无关,调用者退出服务继续运行
bindService方法启动的服务,调用者与服务绑定在一起,调用者退出服务终止
startService方法调用onCreate、onStart、onDestroy方法
bindService方法调用onCreate、onBind、onUnbind、onDestroy方法
在每次服务开启和关闭过程中,只有onStart可以被多次调用
其他方法只会被调用一次
Service使用bindService方法绑定服务并返回一个IBinder对象
需要实现一个自定义的Binder对象作为具体的Service对象
通过IBinder对象可以获取Service中的方法等操作。