Android之服务探究

  

首先,我们来看看服务的英文翻译:,,服务(名词),服务性的(形容词)。在android中服务是如何解释的呢,下面是谷歌的原文翻译:<代码>服务>

,,,,从上面的说明就可以知道服务是什么了,是做什么的,可以做什么,其主要特点有一下几个方面:

(1):服务是一个应用程序的组件。

(2):服务运行在后台的(背景),并且没有用户接口的。

(3):一个应用程序的服务可以在该应用程序退出时,仍然在后台正常运行。

(4):还有就是,一个服务也可以和一个组件(活动)绑定,并可以进行进程间通信。

通过谷歌的描述,我们基本上说明白服务。现在我们来看,服务到底是一个什么东西:

,首先,我们来看服务。服务的java里面定义:


公共抽象类服务延伸ContextWrapper实现ComponentCallbacks2 {   …      } 看到这里,估计你会恍然大悟,原来也是一个上下文子类。我们知道,活动一样也是一个上下文子类。 所以,其实从某种意义上来讲服务和活动本质是一样的。相对于服务来说,活动只是还封装了一些与界面显示相关的方法和数据,以及实现了用户与应用交流的一些像是按键事件处理,窗口信息等这样一类方法。因为,一个服务根本没有可供前台显示,与用户交流的能力,所以可以理解我服务是运行在后来的(在后台运行)。 所以,对服务于来说,一个活动用于处理需要能够与用户直接交流的工作。相对于活动来说,一个服务主要用于处理不需要与用户直接交流的工作,比如播放音乐(当我们推出音乐播放器的时候,音乐仍然还在播放,这里播放这个音乐就是用一个服务来做的)。 如何启动一个服务呢?语境中有启动,停止服务的方法,所以活动和服务都是可以启动和停止一个服务。我们来看看语境中有启动,停止服务的方法(其具体的方法实现,在ContextImpl。java里): 公共抽象ComponentName startService(意图服务);    公共抽象逻辑stopService(意图服务);    公共抽象逻辑bindService(目的服务,ServiceConnection康涅狄格州,int旗帜);    公共布尔bindService(目的服务,ServiceConnection康涅狄格州,int, int userHandle) {   把新RuntimeException(“没有实现。必须在一个子类重写。”);   } 公共抽象空洞unbindService(康涅狄格州ServiceConnection);    由此可见,启动一个服务其实有两种:开始和绑定。有什么区别呢? 我们还是来看看谷歌如何解释stopService的: 使用startService()覆盖默认的服务生命周期是由{@link # bindService}:它要求服务继续运行直到{@link # stopService},无论任何客户端连接到它。    下面看看谷歌如何解释bindService的: 这定义您的应用程序和服务之间的依赖关系。    所需的服务将被视为系统(1):从上面的解释可以知道,用startService()来启动一个服务,该启动的服务不依赖于这个启动他的应用(活动或者服务),几乎可以说和启动这个服务的组件没有其他关联,一般情况下,除非调用stopService()来停止这个服务,否则这个服务是不会因为其他原因被迫停止的,当然这里说的也只是一般情况,往往还有一些特殊情况,如下谷歌的解释: 很显然这是一种特殊情况。只要我们知道,一般情况下系统会尽量让startService启动的服务保持运行状态的,除非stopService()方式来停止这个服务。 (2):相比startService()来启动一个服务,BindService()启动一个服务就不一样了,从上面的谷歌的意思可以知道:BindService()方式启动的服务和启动他的应用是相互依赖的,其实更多的是这个服务依赖于这个应用。实际上android系统是这样觉得的:对于启动这个服务的组件(活动/服务),如果这个组件(活动/服务)都不存在了,那么这个被他启动的服务也是没有必要保留的。 下面我们来看看服务的一个方法:公共空间>我们再来说一下服务这个函数公共空间>接下来,要说最后一个问题:看到有人在网上问,既然服务是在后台运行的,那和定义一个线程来来做这些工作有是不是是一样的呢?回答当然是否定的,而且根本是风牛马不相及,下面一点点来解释:

Android之服务探究