安卓中调用用本地服务和远程服务的方法
2016-11-10 23:14
363 查看
自己new服务是得不到上下文的
bindService的flags是指
BIND_AUTO_CREATE是指如果服务不存在,就创建它
ServiceConnection里未实现的两个方法 分别是 连接成功 取消连接调用的方法
缺陷: 我们不可以调用服务的方法,不可以与服务进行通信
bindService()
可以间接的调用到服务里面的方法,可以与服务进行通信
在服务内部定义一个代理人对象 MyBinder
在onBind方法里面返回代理人对象
在Activity代码采用绑定的方式连接到服务
在ServiceConnection的实现类里面有一个方法,获取到服务返回的代理人对象
强制类型转换IBinder转化成MyBinder类型
调用代理人对象的方法可以达到间接调用服务里面的方法
服务的onStart和onStartCommand不会被执行
解除绑定服务 onUnbind执行后onDestroy
多次的绑定服务,服务只会被创建一次,onCreate方法只会被执行一次
多次绑定服务,onBind方法不会被重复的调用
在实际开发的时候,如果需要调用服务的方法,就绑定服务,只能绑定一次
服务只可以被解绑一次,如果用同一个conn对象多次解绑,服务会抛出异常
服务一旦开启,长期后台运行,服务和开启者(Activity)没有任何关系,开启者退出了, 服务还是继续在后台长期运行,开启者(Activity)不可以调用服务里面的方法.在系统设置界面里面可以观察到
bind的方式开启服务
不求同时生,但求同时死,如果开启者(Activity)退出了,服务也会跟着挂掉
开启者(Activity)可以间接的利用中间人调用服务里的方法.在系统设置界面看不到
在解除绑定时需要将接口引用置null,不然解除绑定后依然可以调用方法
服务如果被开启同时被绑定,服务就停不掉了,必须解除绑定服务才可以停止服务
采用混合的方式开启服务
请严格按照步骤编写代码
start的方式开启服务(保证服务在后台长期运行)
bind的方式绑定服务
调用服务里面的方法
unbind的方式解除服务绑定
stop方式停止服务
服务的代码在当前应用程序的内部
远程服务 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)可以获得远程应用程序的代理人
调用远程应用程序的方法(出现远程服务的异常可以捕获)
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 - 绑定服务调用服务里面的方法,start/bind开启服务的比较,混合方式开启服务,本地服务,远程服务,系统服务,录音API
- 绑定服务:调用远程服务中的方法
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- Android-本地启动服务的方法及调用方法的顺序
- 绑定服务调用本地服务中的方法
- 绑定服务调用远程服务中的方法
- 服务调用RMI远程方法调用示例【基于Spring配置文件】
- 远程服务器调用本地js方法
- 绑定和解除绑定远程服务并调用远程服务的方法
- AIDL:远程调用服务里的方法失败,提示取得的IBinder对象NullPointerException
- 使用AIDL实现IPC通信之——简单调用远程服务的方法
- android中访问本地服务和远程服务的方法
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
- 在Activity中调用本地服务(Service)中的方法
- 工作流学习过程-本地服务之调用方法
- 在Activity中调用本地服务(Service)中的方法
- 在Activity中调用本地服务(Service)中的方法
- 安卓绑定本地服务和远程服务
- 使用AIDL远程调用服务中的方法
- 绑定服务调用本地服务中的方法