您的位置:首页 > 移动开发 > Android开发

安卓中调用用本地服务和远程服务的方法

2016-11-10 23:14 260 查看
自己new服务是得不到上下文的

bindService的flags是指

BIND_AUTO_CREATE是指如果服务不存在,就创建它

ServiceConnection里未实现的两个方法 分别是 连接成功 取消连接调用的方法

对比

startService()

缺陷: 我们不可以调用服务的方法,不可以与服务进行通信

bindService()

可以间接的调用到服务里面的方法,可以与服务进行通信

绑定服务调用服务方法的步骤

编写服务代码

在服务内部定义一个代理人对象 MyBinder

在onBind方法里面返回代理人对象

在Activity代码采用绑定的方式连接到服务

在ServiceConnection的实现类里面有一个方法,获取到服务返回的代理人对象

强制类型转换IBinder转化成MyBinder类型

调用代理人对象的方法可以达到间接调用服务里面的方法

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

绑定的方式开启服务,如果服务不存在,先创建onCreate然后绑定onBind

服务的onStart和onStartCommand不会被执行

解除绑定服务 onUnbind执行后onDestroy

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

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

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

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

两种开启服务方式的比较

start的方式开启服务

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

bind的方式开启服务

不求同时生,但求同时死,如果开启者(Activity)退出了,服务也会跟着挂掉

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

在解除绑定时需要将接口引用置null,不然解除绑定后依然可以调用方法

服务如果被开启同时被绑定,服务就停不掉了,必须解除绑定服务才可以停止服务

混合的方式开启服务

为了保证服务又能长期后台运行,又能调用服务里面的方法

采用混合的方式开启服务

请严格按照步骤编写代码

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

bind的方式绑定服务

调用服务里面的方法

unbind的方式解除服务绑定

stop方式停止服务

本地服务和远程服务

本地服务 local service

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

远程服务 remote service

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

重要概念

进程

操作系统分配的独立的内存空间

IPC

inter process communication进程通讯

AIDL

android interfacce definition language 安卓接口定义语言

绑定远程服务调用服务方法的流程

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

远程服务的接口定义文件.java改成.aidl

把接口定义文件的访问修饰符全部删除掉例如public private

原来代理人MyBinder extends Binder implements IService改成MyBinder extends IService.Stub

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

iService = IService.Stub.asInterface(service)可以获得远程应用程序的代理人

调用远程应用程序的方法(出现远程服务的异常可以捕获)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android service