android Services 上

一个服务本质上讲有两种形式:

Started 启动的

started形式的服务是指当一个应用组件(比如activity)通过startService()方法开启的服务。一旦开启,该服务就可一直地在后台运行,哪怕开启它的组件被销毁掉。通常,开启的服务执行一个单独的操作且并不向调用者返回一个结果。比如,可能从网络进行下载或者上传一个文件。当任务完成,服务就该自我停止。

Bound 绑定的

bound形式的服务是指一个应用组件通过调用 bindService() 方法与服务绑定。一个绑定的服务提供一个客户-服务端接口,以允许组件与服务交互,发送请求,获得结果,甚至执行进程间通信。一个绑定的服务只和与其绑定 的组件同时运行。多个组件可以同时绑定到一个服务,但当全部接触绑定后,服务就被销毁。

  虽然分这两类,但是一个服务可以同时使用这两种方式——可以用started无限期的运行,同时允许绑定。只需要在服务中实现两个回调方法:onStartCommand()允许组件开启服务,onBind()允许绑定。

  不论应用程序是怎么起服务的,应用程序都可以用这个服务。同样的,任何组件可以使用一个Activity通过传递Intent开启服务。你也可以在配置文件设置服务为私有来防止其他应用访问该服务。