Android四大组件之Service
Service用于创建Android的后台服务,功能类似于Linux系统中的守护进程,能够为用户提供长时间运行的后台程序。
Service可能从系统启动时一直持续到系统关闭时才结束。
例如接受短信或者电话的服务,虽然用户没有显示启动短信或者电话接收的服务,但开机时短信或者电话服务就一直运行直到用户关机。
Service与Activity比较
与Activity不同,Activity的程序能够与用户进行交互并会获取当前系统的控制权 例如电话拨号的Activity,该程序需要用户输入号码,并判断用户输入号码的有效性。 Service与Activity完全相反,Service一般不与用户进行运行时的交互,并且Service运行时,不会改变当前应用程序的控制权。 相同点:都代表可执行的程序,有自己的生命周期。创建和配置方式也相似。
Service特点
可以没有用户界面,不需要与用户交互。 可以长期运行,并且不占程序控制权(焦点) 比Activity 的优先级高,不会轻易被Android系统终止,即使Service被系统终止,在系统资源恢复后Service也将自动恢复成运行状态。 用于进程间通信(Inter Process Communication, IPC),解决两个不同Android应用程序进程之间的调用和通讯问题。
Service可以根据应用的需要决定其运行方式,Service包含两种运行方式
本地服务 Local Service 用于应用程序内部。 它可以启动并运行,直至有人停止了它或它自己停止。在这种方式下,它以调用Context.startService()启动,而以调用Context.stopService()结束。不论调用了多少次startService()方法,你只需要调用一次stopService()来停止。
远程服务 Remote Service 用于android系统内部的应用程序之间。 它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。连接以调用Context.bindService()方法建立,以调用 Context.unbindService()关闭。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
Service生命周期
启动方式的Service生命周期
开始于Context.startService() 结束于Context.stopService()
调用者和服务之间没有联系,即使调用者退出了,服务依然在进行 如果一个Service被startService 方法多次启动,那么onCreate方法只会调用一次,onStart将会被调用多次(对应调用startService的次数),并且系统只会创建Service的一个实例(因此只需要一次stopService调用)。该Service将会一直在后台运行,而不管对应程序的Activity是否在运行,直到被调用stopService,或自身的stopSelf方法。
绑定方式的Service生命周期
开始于Context.bindService() 结束于Context.unbindservice()
调用者和绑定者绑在一起,调用者一旦退出服务也就终止了 如果一个Service被某个Activity 调用 Context.bindService 方法绑定启动,不管调用 bindService 调用几次,onCreate方法都只会调用一次,同时onStart方法始终不会被调用。