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事务控制 ...
随机推荐
- 本地主机不安装oracle客户端--访问远程oracle数据库
在不安装oracle客户端情况下用sqlplus连接数据库: 1.去官网下载 http://www.oracle.com/technetwork/topics/winx64soft-089540.ht ...
- Spark实战1
1. RDD-(Resilient Distributed Dataset)弹性分布式数据集 Spark以RDD为核心概念开发的,它的运行也是以RDD为中心.有两种RDD:第一种是并行Col ...
- 字符、字符串和文本的处理之String类型
.Net Framework中处理字符和字符串的主要有以下这么几个类: (1).System.Char类 一基础字符串处理类 (2).System.String类 一处理不可变的字符串(一经创建,字符 ...
- Centos配置vsftpd
#安装vsftpdyum install vsftpd #限制用户只能访问配置的目录,不能访问其他路径#修改vi /etc/vsftpd/vsftpd.conf chroot_list_enable= ...
- JavaScript -- Window-弹出窗口
-----033-Window-弹出窗口.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=& ...
- What does -> do in clojure?
https://stackoverflow.com/questions/4579226/what-does-do-in-clojure
- docker namespaces
https://docs.docker.com/engine/security/userns-remap/#prerequisites 注:以下验证环境为centos7.5 docker 18.09. ...
- 轻量级web富文本框——wangEditor使用手册(5)——配置“插入代码”功能
最新版wangEditor: demo.文档:http://www.wangEditor.github.io/ 下载地址:https://github.com/wangfupeng1988/wangE ...
- MVC源码分析 - ModelBinder绑定 / 自定义数据绑定
这几天老感觉不对, 总觉得少点什么, 今天才发现, 前面 3 里面, 在获取Action参数信息的时候, 少解析了. 里面还有一个比较重要的东西. 今天看也是一样的. 在 InvokeAction( ...
- Linux配置多个Tomcat同时运行
Linux系统下怎样配置多个Tomcat同时运行呢,首先修改变量为第一个tomcat,然后修改第二个tomcat启动的脚本 1.修改环境变量 # vi /etc/profile ####### 工程1 ...