[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的两种提交数据到服务器的方法 本文继续介 ...
随机推荐
- linux和windows共享目录
常用的samba共享 1.安装samba:可以先检查下是否已经安装:rpm -qa | grep samba,没安装直接yum,安装命令:yum install samba 2.创建共享文件夹 mkd ...
- Android中监控home键
一.需求 在应用开发过程中,启动服务开启线程锁等待服务返回解锁,为了避免点击home键使线程锁卡死的bug,需要监控home键,解锁线程. 二.实现 在应用时,需要register和unregiste ...
- Django开发目录
Django开发[第一章]:Django基础和基本使用 Django开发[第二章]:Django URLConf 进阶 Django开发[第三章]:Django View 进阶 Django开发[第四 ...
- arp脚本
1.什么是arp?arp可以解决什么问题? ARP:是地址解析协议 arp解决我们知道一个机器(主机或者路由器)的IP地址,需要找出其相应的硬件地址 2.编写ARP脚本,抓取对应主机的mac地址 1 ...
- day_10初级函数
今天讲了函数初级 函数:完成特定功能的代码块,作为一个整体对其进行特定的命名,该名字就是代表函数 --现实中很多问题要通过一些工具进行处理 ,,可以将工具提前准备好并命名 通过名字就可以找到这个工具 ...
- Web browser的发展演变
我们每天都在使用着浏览器,每个人使用的浏览器各不一样.在这个科技飞速发展的时代,一个游览器能否站住脚跟取决于使用者的数量,看用户是否喜欢这个产品,听取用户们的意见来改善. 我们这个年龄的人最初用到的浏 ...
- 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口
[源码下载] 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口 作者 ...
- sqlserver使用存储过程跟踪SQL
为跟踪EF生成的SQL /1.添加存储过程/ USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_ ...
- spark-submit(spark版本2.4.2)
spark-submit官方文档 :http://spark.apache.org/docs/latest/submitting-applications.html Launching Applica ...
- Python编程练习:简单的闹钟提醒
问题详情:当前时间为下午2点,你在手机上设置了一个闹钟提醒,10000秒后触发该闹钟,请问闹钟铃声响起时的具体时间?请用print打印出时间 源码: a = 10000 h,m,s=2,0,0 if ...