2024年3月31日发(作者:)

Service概念及用途

Android中的Service,其意思是“服务”,它是在后台运行,不可交互的。Service

自己不能运行,需要通过某一个Activity或者其它Context对象来调用,如

Context .startService() 和rvice()两种方式启动Service 。

Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,

运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,

那我们什么时候会用到Service呢?比如我们播放音乐的时候,有可能想边听音乐边干些

其他事情,当我们退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这

时候就得用到Service了,又比如当我们一个应用的数据是通过网络获取的,不同时间(一

段时间)的数据是不同的这时候我们可以用Service在后台定时更新,而不用每打开应用

的时候在去获取。

如果在Service的onCreate或者onStart方法中做一些很耗时的动作,最好是启动

一个新线程来运行这个Service,因为,如果Service运行在主线程中,会影响到程序的

UI操作或者阻塞主线程中的其它事情。

Service生命周期

Service的生命周期方法比Activity要少一些,只有onCreate、onStart、onDestroy。

有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1)通过startService启动

Service启动的时候会经历生成开始(onCreateonStart)过程,Service停止的时

候直接进入销毁过程(onDestroy)。而如果是调用者直接退出而没有调用stopService,

Service会一直在后台运行。直到下次调用者再启动起来,并明确调用stopService。

2)通过bindService启动

通过bindService方法启动Service,其只会运行onCreate方法,如果调用退出了,

Service会调用onUnbind,onDestroyed方法。Service的onCreate方法只会被调用一

次。如果先绑定了,那么启动的时候就直接运行Service的onStart方法,如果先启动,

那么绑定的时候就直接运行onBind方法。如果先绑定上了,就停止不了,也就是

stopService不能用了,只能先unbindService ,再stopService,所以,先启动还是先绑

定,是有区别的。