Android    Interface Definition  Language简称AIDL翻译为 :安卓       接口      定义        语言

AIDL:进程间通信。Android Interface Defination Language。(使用接口回调的思想)

举例:

B应用程序中有一个服务,功能是做加法运算。
A应用程序需要执行B应用中的加法功能。
A中产生2个加数,将数据传给B应用的服务。B进行运算,将运算结果返回给A。
我们要定义一个AIDL接口规范进程间的通信,AIDL接口的代码格式和传统的Java有些不同

AIDL使用的前提:Service的绑定方式。
onCreate 创建
onBind 绑定
onUnbind 解除绑定
onDestroy 销毁

故事:
板砖A(Activity)和板砖S(Service)
1、去五金商店买胶水
2、将胶水涂在S表面上
3、将A板砖粘在S表面上(注意:A和S中间有胶水)
4、检测A和S是否粘牢
5、如果粘牢,拿去拍人吧

代码中
1、创建胶水类Binder
2、在Service的onBind方法中初始化胶水
3、使用Activity去绑定Service
4、通过一个接口来确定Activity和Service是否连接成功
5、如果连接成功,A程序的Activity就可以使用B程序的Service了

思路:
先实现B程序的Service,具有加法运算功能
再实现A程序的Activity,去绑定Service

服务端:

/**
* 服务端,包含一个Service,运用执行加法运算
* 1、创建进程间通信使用的AIDL接口
* 2、实现Service
* 3、等待客户端访问该Service
*/
public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
} public class PlusService extends Service {
public PlusService() {
} // 创建
@Override
public void onCreate() {
super.onCreate();
Log.d("1507", "Service onCreate");
} // 1、创建胶水类
// stub:本意为存根。AIDL提供的类似于胶水的类,在这个胶水中实现了加法运算
private static class MyBinder extends IMyAidlInterface.Stub { @Override
public int plus(int plus01, int plus02) throws RemoteException {
return plus01 + plus02;
}
} // 绑定
@Override
public IBinder onBind(Intent intent) {
Log.d("1507", "Service onBind");
return new MyBinder();
} // 解绑
@Override
public boolean onUnbind(Intent intent) {
Log.d("1507", "Service onUnbind");
return super.onUnbind(intent);
} // 销毁
@Override
public void onDestroy() {
Log.d("1507", "Service onDestroy");
super.onDestroy();
}
}

清单文件:

 <service
android:name=".service.PlusService"
android:enabled="true"
android:exported="true"> <intent-filter>
<action android:name="bind_server"/>
</intent-filter> </service>

客户端:

/**
* 3、绑定服务端的Service
* 4、通过ServiceConnection接口确定是否连接成功
* 5、如果连接成功,调用Service的操作
*/
public class MainActivity extends AppCompatActivity implements
View.OnClickListener, ServiceConnection { // 自定义Action
public static final String ACTION_BIND = "bind_server"; protected EditText mPlus01Et;
protected EditText mPlus02Et;
protected Button mCalculateBtn;
protected TextView mResultTv;
private IMyAidlInterface mPlusInterface; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("1507", "Activity onCreate");
super.setContentView(R.layout.activity_main);
initView();
bindService();
} // 绑定Service
private void bindService() {
Intent intent = new Intent(ACTION_BIND);// action
intent.setPackage("net.bwie.aidlserver");// server端对应的包名
boolean isBindSuccessful = bindService(intent, this, Context.BIND_AUTO_CREATE);
Toast.makeText(this, "" + isBindSuccessful, Toast.LENGTH_SHORT).show();
} @Override
public void onClick(View view) {
if (view.getId() == R.id.calculate_btn) {
int plus01 = Integer.parseInt(mPlus01Et.getText().toString());
int plus02 = Integer.parseInt(mPlus02Et.getText().toString()); // 调用AIDL接口中的方法
try {
int result = mPlusInterface.plus(plus01, plus02);
mResultTv.setText("结果是:" + result);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}

AIDL安卓接口定义语言的更多相关文章

  1. AIDL —— Android接口定义语言

    AIDL:Android Interface Definition Language,即Android接口定义语言,是Android进程间通信比较常用的一种方式.翻译一下,就是为了让某个Service ...

  2. Effective Java 第三版——41.使用标记接口定义类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  3. JBPM4.4_jBPM4.4的流程定义语言(设计流程)

    1. jBPM4.4的流程定义语言(设计流程) 1.1. process(流程) 是.jpdl.xml的根元素,可以指定的属性有: 属性名 作用说明 name 流程定义的名称,用于显示. key 流程 ...

  4. Java 8新特性-2 接口定义增强

    为了解决当原有的接口中方法不足时,向原有的接口中添加新的方法,该接口下的N多实现类也需要重写该方法的问题!Java8引入了接口定义增强概念! Java8 打破了原有的接口的方法定义: 公共的.抽象的  ...

  5. java数据结构_附11_图的接口定义

    图的接口定义 Graph public class UnsupportedOperation extends RuntimeException {public UnsupportedOperation ...

  6. [Asp.net 5] Configuration-新一代的配置文件(接口定义与基础实现)

    关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 本系列文章讲的是asp.net 5(Asp.net VNext)中的配置文件部分,工程下载地址为:https: ...

  7. IOleItemContainer的接口定义

      IOleItemContainer的接口定义

  8. IBindCtx接口定义

    IBindCtx接口定义

  9. Oracle language types(语言种类) 表的相关操作 DDL数据定义语言

    数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...

随机推荐

  1. MySQL 5.5主从复制(Replication)

    简介 MySQL的主从复制(Replication),可以保持两台MySQL数据库的内容一致.因为其同步过程是异步的,所以备份数据库上做任何操作,都不会影响主数据库的性能.对游戏后台数据库而言,这是一 ...

  2. Numpy.random中shuffle与permutation的区别(转)

    huffle与permutation的区别 函数shuffle与permutation都是对原来的数组进行重新洗牌(即随机打乱原来的元素顺序):区别在于shuffle直接在原来的数组上进行操作,改变原 ...

  3. 课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 1、两层神经网络的单样本向量化表示与多样本向量化表示

    如上图所示的两层神经网络, 单样本向量化:                                                                                ...

  4. 全网最详细的CentOS7里安装MySQL时出现No package mysql-server available错误的解决办法(图文详解)

    不多说,直接上干货! 直接yum install mysql的话会报错,原因在于yum安装库里没有直接可以用的安装包,此时需要用到MariaDB了,MariaDB是MySQL社区开发的分支,也是一个增 ...

  5. 【详解】JNI (Java Native Interface) (三)

    案例三:C代码访问Java对象的实例变量   获取对象的实例变量的步骤: 1. 通过GetObjectClass()方法获得此对象的类引用 2. 通过类引用的GetFieldID()方法获得实例变量的 ...

  6. ant jmeter 优化报告

    一:主要内容 报告展示,该报告利用的jmeter.results.shanhe.me.xsl里面加入了自己写的部分代码,优化了展示效果 下载安装ant 修改jmeter.properties 下载jm ...

  7. ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)

    1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...

  8. Silverlight 查询DataGrid 中匹配项 ,后台改变选中行颜色

    需求:根据关键字(参会人号码或名称)查找参会人,在datagird 中高亮显示 界面:我在界面上增加了一个文本框和按钮,进行查找操作 操作说明: 根据关键字进行搜索:输入关键字 点击查找,如果找到 以 ...

  9. 一个Time TodoList实例了解redux在wepy中的使用

    @subject: wepy-redux-time-todo @author: leinov @date:2018-10-30 @notice: 小程序(wepy)开发群110647537 欢迎加入 ...

  10. js 中格式化时间

    在js中常常要求对时间的输出格式进行格式化,比如 2017-01-01 10:10,比较麻烦的是月,日,小时,分.它们的格式一般要求两位,如果小于10的话需要在前边补0,当然这算不上什么问题,可以通过 ...