Android Service的分类详解

  按照启动方式分类

  谷歌官网对Service的分类

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

  Started Service

  1.startService()来启动

  startService通过Activitycontact

  调用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

  原生服务就是我们用cc++,实现的系统级的服务我们可以把它当成在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/

原文地址:https://www.cnblogs.com/gaobig/p/5924482.html