AIDL安卓接口定义语言
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安卓接口定义语言的更多相关文章
- AIDL —— Android接口定义语言
AIDL:Android Interface Definition Language,即Android接口定义语言,是Android进程间通信比较常用的一种方式.翻译一下,就是为了让某个Service ...
- Effective Java 第三版——41.使用标记接口定义类型
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- JBPM4.4_jBPM4.4的流程定义语言(设计流程)
1. jBPM4.4的流程定义语言(设计流程) 1.1. process(流程) 是.jpdl.xml的根元素,可以指定的属性有: 属性名 作用说明 name 流程定义的名称,用于显示. key 流程 ...
- Java 8新特性-2 接口定义增强
为了解决当原有的接口中方法不足时,向原有的接口中添加新的方法,该接口下的N多实现类也需要重写该方法的问题!Java8引入了接口定义增强概念! Java8 打破了原有的接口的方法定义: 公共的.抽象的 ...
- java数据结构_附11_图的接口定义
图的接口定义 Graph public class UnsupportedOperation extends RuntimeException {public UnsupportedOperation ...
- [Asp.net 5] Configuration-新一代的配置文件(接口定义与基础实现)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 本系列文章讲的是asp.net 5(Asp.net VNext)中的配置文件部分,工程下载地址为:https: ...
- IOleItemContainer的接口定义
IOleItemContainer的接口定义
- IBindCtx接口定义
IBindCtx接口定义
- Oracle language types(语言种类) 表的相关操作 DDL数据定义语言
数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...
随机推荐
- 关于并发用户数的思考-通过PV量换算并发
首先介绍一下pv量:PV(访问量):即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次.UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客.00 ...
- 安装Centos7 随手记
1.老笔记本安装Centos7 配置:酷睿I3 内存8G 2.原有系统Win7 将原来的硬盘空间,调整出60G 给Centos7 用. 3.安装Centos7 图形介面的,和windows安装过程类 ...
- 课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 2、Practice Questions
1.以下哪一项是正确的?(检查所有适用的) (A,D,F,G) A. a[2] 表示第二层的激活函数值向量. B. X 是一个矩阵, 其中每一行都是一个训练示例. C. a[2] (12) 表示第二 ...
- IDEA快捷键--与Eclipse快捷键的对比--IDEA快捷键设置成Eclipse默认快捷键
部分内容转载于:http://blog.csdn.net/dc_726/article/details/9531281 IntelliJ Idea 常用快捷键列表 Ctrl+Alt+t 选择代码块 t ...
- 阿里云负载不支持 WebSocket 协议与 WSS 和 Nginx 配置问题
WebSocket 是 HTML5 下一种新的协议.它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的.它与HTTP一样通过已建立的TCP连接来传输数据,但是它和HTT ...
- 浏览器中F5和CTRL F5的行为区别及如何强制更新资源
一.浏览器中F5和CTRL F5的行为区别 我们直接来看效果,下面是我打开qq网页,分别使用F5和CTRL F5,我们来看区别. F5: CTRL F5: 区别: 首先直观上的区别是CTRL F5明显 ...
- 设置ListView显示到最后一行
上次聊天的那个界面上用的一个TextView,然后每次消息都用text.append("消息内容"+"\n")函数来在text字符串后边接一段,然后重新显示这个 ...
- 帝国CMS-后台使用
后台管理----- 网址wxtoupiao111.com 后台http://wxtoupiao111.com/e/admin/账号密码认证码admin 数据库 账号root 密码空http://wx ...
- Is it possible to display icons in a PopupMenu?
I really like the new PopupMenu we got in 3.0, but I just can't display any icons next to the menu i ...
- Linux系统基础知识整理
一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...