
上QQ阅读APP看书,第一时间看更新
1.2.2 生命周期
服务的生命周期分两种情况:
1)如果仅是在活动中调用了startService()方法,这时相应的服务会被创建并启动,onCreate()和onStartCommand()方法会依次被执行,当然如果下次再调用startService()方法,由于服务已经被创建了,所以仅执行onStartCommand()方法。如果停止服务,可以在活动中调用stopService()方法,此时服务的onDestroy()方法执行。需要注意的是,由于每个服务都只存在一个实例,所以要停止服务,只需要调用一次stopService()即可(不管调用了多少次startService()方法)。生命周期如下:


2)如果活动调用了bindService()方法,这时服务被创建并启动,此时依次执行的是onCreate()和onBind()方法,当然如果下次再调用bindService()方法,也只会执行onBind()方法。活动调用bindService()可以获取服务的onBind()里返回的IBinder对象实例,这样就能实现活动与服务交互。停止服务只需调用unbindService()方法,服务的onDestroy()方法会自动执行。生命周期如下:

这里要注意的是,如果同时调用了startService()方法与bindService()方法,那么在停止服务时,需要同时调用stopService()方法与unbindService()方法。