关于Android中的service的简单描述

来源:互联网 发布:linux运维岗笔试题 编辑:程序博客网 时间:2024/06/07 05:12


一:Service是什么? 

 Service是Android系统的组件之一,和Activity,Intent,Conent Provider并称Android四大天王,Service是不可见的,是没有界面的,是在后台运行的,运行在当前程序的进程里面,它的应用场景有很多,比如监视硬件是否被插入(例如usb接口),还有链接服务器刷新最新的数据(比如要做一个股票的显示界面)等等,需要注意的是:服务是运行在主线程里面(main),不可以直接在服务里面进行一些耗时的操作的


二:为什么要用服务?服务和线程的区别?

简单来说,服务中有进程,优先级别比较高,服务进程如果在内存不足被回收以后,一旦内存充足,它就会死而复生

三:服务的生命周期

Service的生命周期并不像Activity那么复杂,它只继承了onCreate()、onStart()、onDestroy()三个方法

当我们第一次启动Service时,先后调用了onCreate()、onStart()这两个方法;当停止Service时,则执行onDestroy()方法。

这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。

它可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停止自己,只要调用一次stopService()方法便可以停止服务,无论调用了多少次的启动服务方法。


绑定的方式开启服务的生命周期:

绑定的方式开启服务,如果服务不存在,oncreate--->onbind

服务的onstartonstartcommand方法不会被执行.

解除绑定服务 onunbind()--->ondetroy()

多次绑定服务,服务只会被创建一次,oncreate方法只会被执行一次

多次绑定服务,onbind方法不会被重复调用.

在实际开发的时候,如果需要调用服务的方法,就绑定服务,只能绑定一次

服务只可以被解绑一次,如果用同一个conn对象多次解绑,服务会抛出一次.

两种开启方式的比较:

start的方式开启服务:

服务一旦开启,长期后台运行,服务和开启者(Activity)没有任何的关系,开启者退出了,服务还是继续在后台长期运行,开启者(Activity)不可以调用服务里面的方法.在系统设置界面里面可以观察到

 bind的方式开启服务

  如果开启者(Activity)退出了, 服务也会跟着挂掉.

开启者(Activity)可以间接的利用中间人调用服务里面的方法.在系统设置界面看不到的.

四:编写步骤:

1. start的方式开启服务 (保证服务长期后台运行)

2. bind的方式绑定服务 (调用服务的方法)

3.unbind的方式解除绑定服务

4. stop的方式停止服务

五:本地服务和远程服务

本地服务:local service

服务的代码在当前应用程序的内部

远程服务:remote

服务的代码在另外一个应用程序里面

绑定远程服务的详细步骤:

1.跟本地服务的代码编写是一样.

2.远程服务的接口定义文件.java--->.aidl

3.把接口定义文件的访问修饰符全部删除 public private

4.原来代理人MyBinder extend Binder implemetIService--> extends IService.Stub

5.先把远程服务.aidl文件拷贝到本地应用程序的工程目录里面,包名一致

6.iService = IService.Stub.asInterface(service);得到远程服务的代理对象

7.通过代理对象调用远程服务的方法.

 

 

0 0