Android Service详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Service详解相关的知识,希望对你有一定的参考价值。

参考技术A 生命周期如下:

两种启动方式

第一种方式: startService()

通过startService启动后,service会一直无限期运行下去,只有外部调用了stopService()或stopSelf()方法时,该Service才会停止运行并销毁。

当第一次调用的时候,方法顺序是:

构造方法——oncreate()——onStartCommand()

当第二次被调用的时候,直接调用onStartCommand()

结束:stopService():——>onDestory()

第二种方式:bindService()

bindService启动的服务和调用者之间是典型的client-server模式。调用者是client,service则是server端。service只有一个,但绑定到service上面的client可以有一个或很多个。这里所提到的client指的是组件,比如某个Activity。

client可以通过IBinder接口获取Service实例,从而实现在client端直接调用Service中的方法以实现灵活交互,这在通过startService方法启动中是无法实现的。

bindService启动服务的生命周期与其绑定的client息息相关。client也可以明确调用Context的unbindService()方法与Service解除绑定。当所有的client与service解除绑定的时候,才会调用onUnbind,然后 Service会自行销毁。

第一次调用:

构造方法——oncreate()——onBind()——onServiceConnected()

结束:unbindService():如果当前有Activity与Service相连——>onUnbind()——>onDestory()

Intentservice

IntentService 是继承于 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时操作,启动 IntentService 的方式和启动传统 Service 一样,同时,当任务执行完后,IntentService 会自动停止,而不需要我们去手动控制。

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/

以上是关于Android Service详解的主要内容,如果未能解决你的问题,请参考以下文章

Android Service 详解四:开始停止service

Android 中的 Service 全面总结详解下

android中Service使用详解

Android Service的分类详解

android四大基础组件--Service生命周期详解

关于Android Service真正的完全详解,你需要知道的一切