Service(服务):是一种可以在后台执行长时间运行操作而没有用户界面的应用组件。
一经启动会长时间在后台运行,即使启动它的Activity或者Broadcast被销毁了也不会受影响。
注意:Service和Broadcast一样,运行在主线程中,不能做长时间的耗时操作。
Service和Thread的区别:
1.Thread是程序执行的最小单元,可以执行异步操作,相对独立。Service是运行在主线程中,不独立,依附于主线程。
2.Thread可以执行耗时操作,但是Service不可以,因为Service运行在主线程上。
3.Service中需要开启子线程才能执行耗时操作,在Service开启线程好处是如果Activity被销毁,但是Service仍然运行,不会影响后台任务的运行。如果在Activity中创建子线程,Activity很难对子线程进行控制,当Activity被销毁之后,无法获取到之前创建的子线程实例。
启动Service的两种方式:
1.startService:服务启动就会一直运行,如果Activity被销毁,对Service运行不受影响,除非手动停止Service。
startService之后,Service会依次调用onCreate(),onStartCommand()方法。
onCreate():首次创建服务时,系统会调用来执行一次性设置程序,在调用onStartCommand()或onBind()之前,如果服务已经启动,则不会调用此方法,只会调用一次
onStartCommand():每次通过startService启动service时都会调用此方法。
关闭Service的两种方式:
stopService或者stopSelf,会调用onDestory(),里面可以做资源清理。
步骤:1.创建一个类继承自Service
2.在Manifest.xml文件中配置该Service
3.使用Context的startService(intent)方法启动改Service
4.不再使用时,调用stopService(intent)方法停止该服务
2.绑定Service:
步骤:1.创建BindService服务端,继承自Service并在类中,创建一个实现IBinder接口的实例对象并提供公共方法给客户端调用。
2.从onBind()回调方法返回此Binder实例
3.在客户端中,从onServiceConnected()回调方法接受Binder,并使用提供的方法调用绑定服务。
BindService后,会依次调用onBind(),onCreate()方法,如果绑定服务的Activity被销毁,服务也会解绑,调用onDestory()方法