一、Service是什么
Service同样也是Android四大组件之一。Android Service服务的最主要特点在于后台工作不直接跟用户直接交互,为应用程序提供数据和运算。
Service(服务)主要完成两件主要的事情,分别是:1、完成后台 数据的准备和运算,完成周期性的更新操作。2、完成进程间的通信。
二、Service的两种形式
1、启动型(Started)
表示应用程序中的组件调用StartService方法后运行的服务,当服务启动后就会在后台运行,即使开启此服务的组件已经结束了。通常情况下,启动型服务适合完成一项专门的工作,并且不返回任何的结果数据给调用者。
①首次启动会创建一个Service实例,依次调用onCreate()和onStartCommand()方法,此时Service 进入运行状态,如果再次调用StartService启动Service,将不会再创建新的Service对象, 系统会直接复用前面创建的Service对象,调用它的onStartCommand()方法。
②但这样的Service与它的调用者无必然的联系,就是说当调用者结束了自己的生命周期, 但是只要不调用stopService,那么Service还是会继续运行的。
③无论启动了多少次Service,只需调用一次StopService即可停掉Service。
2、绑定型(Bound)
表示服务是由bindService方法调用后启动的,它主要提供服务器,客户端接口允许组件与服务进行交互,发送请求,获取结果,甚至通过跨进程调用进行数据交互,绑定型仅仅在有其它的应用组件与它绑定的时候运行,另外,它也允许多个组件同时绑定到此服务上,当组件跟绑定型服务取消绑定的时候,此服务就会终止。
①当首次使用bindService绑定一个Service时,系统会实例化一个Service实例,并调用其onCreate()和onBind()方法,然后调用者就可以通过IBinder和Service进行交互了,此后如果再次使用bindService绑定Service,系统不会创建新的Sevice实例,也不会再调用onBind()方法,只会直接把IBinder对象传递给其他后来增加的客户端!
②如果我们解除与服务的绑定,只需调用unbindService(),此时onUnbind和onDestory方法将会被调用!这是一个客户端的情况,假如是多个客户端绑定同一个Service的话,情况如下 当一个客户完成和service之间的互动后,它调用 unbindService() 方法来解除绑定。当所有的客户端都和service解除绑定后,系统会销毁service。(除非service也被startService()方法开启)
③另外,和上面那张情况不同,bindService模式下的Service是与调用者相互关联的,可以理解为 "一条绳子上的蚂蚱",要死一起死,在bindService后,一旦调用者销毁,那么Service也立即终止。