AndroidService的分类详解

按照启动方式分类

谷歌官网对Service的分类


AndroidService的分类详解_第1张图片

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

Started Service

1.startService()来启动

startService通过Activity的contact

调用startService(service).


AndroidService的分类详解_第2张图片

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需求将越来越高。


AndroidService的分类详解_第3张图片

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

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


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

你可能感兴趣的:(AndroidService的分类详解)