按照启动方式分类

  谷歌官网对Service的分类

  Service根据启动方式分为两类:Started和Bound。其中,Started()是通过startService()来启动,主要用于程序内部使用的Service,而Bound是通过bindService()来启动,允许多个应用程序共享同一个Service。

  Started Service

  1.startService()来启动

  startService通过Activity的contact

  调用startService(service).

  2,一旦启动,就运行在后台,即便启动它的对象(Activity)都销毁了

  3,通常只启动,不返回值

  4,通常网络上传或者下载,操作完成后,自动停止

  onStartCommand()

  onStartCommand服务里面的方法

  Bound Service

  1,bindService()来绑定

  会调用bindService来绑定

  2,提供客户端服务器接口来启动

  它有个客户端和服务器段的模型

  3,发送请求,得到返回值,甚至通过IPC来通讯

  ipc内部进程通讯来进行通讯。

  4,一个服务可以被多个调用者绑定,只要有一个绑定者,服务运行,所有绑定者都退出,服务退出

  我现在同样是一个服务,我可能用Activity A跟它绑定一下,B跟他绑定一下,当我A退出了的时候,由于B还绑定的,所以这个服务还不会退出。

  就是当所有的绑定者都退出了,我们的服务才会退出。

  onBind()

  他会用到的一个重载方法叫onBind

  按服务性质分

  Local Service 

  本地服务,指的就是同一个进程,用于应用程序内部

  功能:用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。

  使用:在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。

  Remote Service  

  远程服务,在android里面远程指的是不同的进程之间也会有服务器端客户端的模型,用于android系统内部的应用程序之间。

  功能:可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。

  使用:可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。

  按实现方法分类

  Java Service

  Native Service

  原生服务就是我们用c和c++,实现的系统级的服务我们可以把它当成在library内层。

  Native Service,这是Android系统里的一种特色,就是通过C++或是C代码写出来的,供Java进行远程调用的Remote Service,因为C/C++代码生成的是Native代码(机器代码),于是叫Native Service。随着Android系统的性能需求越来越高,Native Service需求将越来越高。

  在Service里面要用到它,就不需要再manifest里面配置好,有了配置就知道,manifest所有的元素都是类,所以我们肯定有个Service的类。

Service的配置很简单,就是配置一下它的名字就好了。

原文链接:http://www.maiziedu.com/wiki/component/classify/

最新文章

  1. Mac 系统环境变量配置
  2. PB-日志-系统函数2.13.7Match()、MatchW()
  3. Android布局优化
  4. HDU 2896 病毒侵袭
  5. 基于eclipse创建android的helloworld工程
  6. jquery 100%全屏自适应宽可点击左右和焦点的自动切换幻灯片特效
  7. imdisk命令行使用及配置
  8. Eclipse 打开文件所在文件夹
  9. [Cake] 1. CI中的Cake
  10. 记录一些flutter学习网址
  11. VC在线程中操作界面
  12. 一: vue的基本使用
  13. 使用solr界面管理工具创建core 不能用的解决方法
  14. web.py开发
  15. Graham求凸包模板
  16. uvaoj455Periodic Strings(枚举)
  17. HDU - 4407 Sum (容斥)
  18. 从零开始的全栈工程师——jQuery
  19. const char *p; char const *p; char * const p的区别
  20. 企业工商营业执照副本模板PSD源文件素材下载

热门文章

  1. 浅谈Linux下mv和cp命令的区别
  2. .net core 发布到docker
  3. python中的"is"与"=="比较
  4. Java源码解析——集合框架(四)——LinkedListLinkedList原码分析
  5. SpringMVC+Mybatis框架搭建
  6. 转载:小白使用eclipse提交到GitHub (详细步骤)
  7. asp.net core mvc简介
  8. python2.7练习小例子(二十一)
  9. responsive grid
  10. Vue 去脚手架插件,自动加载vue文件