[android] 采用aidl绑定远程服务
aidl:android interface definition language 安卓接口定义语言
在两个不同的应用程序里面使用同一个接口
使用场景:调用支付宝服务进行支付
先写远程服务端Serivice
新建一个AlipayService继承系统Service
在清单文件里面,添加一个<service>节点,为了能够让别人调用,添加一个隐式意图
添加一个意图过滤器<intent-filter>节点,新加一个动作节点<action>设置名称属性android:name=”com.xxx.alipay”
重写方法
onBind()
onUnbind()
onCreate()
onDestroy()
定义一个接口IService,添加一个想要暴露的方法
定义一个内部类MyBinder继承系统的IBinder类实现一个自己的接口比如:IService类,实现上面接口的方法,里面调用AlipayService中的方法
在onBind()方法里面返回上面的IBinder对象,远程服务就做好了
在这里使用aidl来定义一个接口,直接把我们上面的IService.java接口改成IService.aidl,此时会报语法错误,因为aidl里的所有类和方法都是公共的,因此我们把里面的public访问修饰符全都去掉,此时会看到gen目录下面自动生成了一个IService.java的接口类,这个类自动实现了进程间的通讯IPC(inter process communication)
上面的MyBinder就不需要继承IBinder类了,直接继承IService的内部类Stub,ISerivice.Stub
这时远程的代码才真正完成
客户端的代码里
获取Intent对象,通过new出来
调用Intent对象的setAction()方法,参数:上面远程端定义的意图过滤器动作
调用bindService(intent,conn,flags)方法,绑定服务,参数:Intent对象,ServiceConnection对象,BIND_AUTO_CREATE
创建一个内部类MyConn实现ServiceConnection类,实现以下方法
onServiceConnected(CompontName name,IBinder service)
在这个方法里面需要强转IBinder对象到IService,这里不是自动的强转而是应该用它的api来转,IService.Stub.asInterface(service)方法来向下转类型
因为IBinder对象是远程的,因此需要把远程端代码里面定义的IService.aidl拷贝过来,注意包名也要和远程端一致
调用中间人的方法
中间人调用服务的方法
[android] 采用aidl绑定远程服务的更多相关文章
- 使用aidl绑定远程服务
一.服务端 1.清单文件,因为要远程调用,所以要配个action <service android:name="com.example.alipayservice.AliPayServ ...
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
1. 概述 bindService() 绑定服务 可以得到服务的代理人对象,间接调用服务里面的方法. 绑定服务: 间接调用服务里面的方法. 如果调用者activity被销毁了, ...
- 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
============================================================================ 服务的生命周期: 一.采用start的方式开始 ...
- Android学习笔记_23_服务Service之AIDL和远程服务实现进程通信以及进程间传递自定义类型参数
一.了解AIDL语言: 在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然, Java中是不支持跨进程内存共享的.因此要传递对象, 需要把对象解析 ...
- android基础---->AIDL服务的使用
AIDL和其他的IDL类似,它允许你定义程序接口,以便客户端与服务器端通过IPC机制交互.在android上面,一个进程一般不能访问另外进程的内存.因此,Android平台将这些跨进程访问的对象分解成 ...
- Android 进程间通信——AIDL
代码地址如下:http://www.demodashi.com/demo/12321.html 原文地址:http://blog.csdn.net/vnanyesheshou/article/deta ...
- Android开发aidl使用中linkToDeath和unlinkToDeath的使用
1.Binder死亡代理 这一节首先将介绍Binder类中比较重要的两个方法linkToDeath和unlinkToDeath.我们知道Binder是运行在服务进程,若服务端进程因为某种原因“ ...
- Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- AIDL
服务端: 最终项目结构: 这个项目中,我们将用到自定义类CustomData作为服务端与客户端传递的数据. Step 1:创建CustomData类 package com.ldb.android.e ...
- Android 采用HttpClient提交数据到服务器
在前几篇文章中<Android 采用get方式提交数据到服务器><Android 采用post方式提交数据到服务器>介绍了android的两种提交数据到服务器的方法 本文继续介 ...
随机推荐
- [转] 分代垃圾回收的 新旧代引用问题(原标题:Back To Basics: Generational Garbage Collection)
原文链接: https://blogs.msdn.microsoft.com/abhinaba/2009/03/02/back-to-basics-generational-garbage-colle ...
- 自学自用 = 网易云课堂(细说Linux-从入门到精通视频教程)
视频地址 https://study.163.com/course/courseMain.htm?courseId=983014 介绍 本篇博客,旨在记录视频学习的要点,所以格式随意,且没有文字描述, ...
- 谷歌浏览器隐藏url前缀问题
此前曾有用户表示,谷歌若在Chrome的地址栏中隐藏URL的HTTP.HTTPS及WWW前缀,那么用户的安全将有可能遭至威胁,如果你不希望Chrome浏览器隐藏URL的HTTP.HTTPS及WWW前 ...
- Java核心技术卷一基础知识-第6章-接口与内部类-读书笔记
第6章 接口与内部类 本章内容: * 接口 * 对象克隆 * 接口与回调 * 内部类 * 代理 接口技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现(implement)一 ...
- Eclipse 启动报错 An internal error occurred during: "Initializing Java Tooling"
如图所示,我的Eclispe版本是Oxygen,启动的时候turnaround弹出这种错误. 多种情况会导致这种报错.通过[重置窗口布局],可解决大部分情况: 解决办法:点击菜单导航栏的Window ...
- Core统一日志处理
新建一个Core的Web项目,然后创建相关文件等 添加一个处理错误的类库ErrorMiddleware 下面是该类库的代码 public class ErrorMiddleware { stati ...
- idea导入maven项目 傻瓜都能看懂
1.找到你需要导入的项目 2.打开idea ------------------------------------------------------------------------------ ...
- Ubuntu释放磁盘空间的几种常用方法
一 安装stacer,使用它来清空系统内存 其实 Stacer 的安装步非常简单,只需到 Github 的发布页面下载到 .deb 包,再用 GDebi 或如下命令安装即可: wget https:/ ...
- 超声波手势识别(STM32四路超声波获取)
超声波手势识别在市场上已经有见实现,但研究其传感器发现并不是市场上随意可见的,如果暂且考虑成本,该如何入门实现简单的手势识别呢.聊天中老师给出一个很好的提议,就是固定四个超声波,分别为上下左右,然后进 ...
- [工具]K8tools github/K8工具合集/K8网盘
K8tools 20190428 声明: 工具仅供安全研究或授权渗透,非法用途后果自负. 博客: https://www.cnblogs.com/k8gege 下载: https://github.c ...