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事务控制 ...
随机推荐
- odoo datetime 直接修改模版语言 去掉时分秒
<field name='date_order' widget='date'/> 利用date widget即可使dateime类型的显示为date.
- 前端代码质量保障之代码review
经验丰富的程序员和一般程序员之间的最大区别,不仅体现在解决问题的能力上, 还体现在日常代码的风格上.掌握一门技术可能需要几月,甚至几周就够了. 好的习惯风格养成却需数年. 团队成员之间需要合作,代码需 ...
- Unity使用Rider作为IDE的体验
Rider 2017.2.1比较完整的支持Unity开发. 通过添加插件代码实现了直接选择Rider作为编辑器. 支持调试. 支持双击跳转代码. Alt+Insert可以插入Unity event函数 ...
- 继承extends、super、this、方法重写overiding、final、代码块_DAY08
1:Math类的随机数(掌握) 类名调用静态方法. 包:java.lang 类:Math 方法:public static double random(): Java.lang包下的类是不用导包就可 ...
- 全网最详细的PLSQL Developer + Oracle client的客户端 或者 PLSQL Developer + Oracle server服务端的下载与安装过程(图文详解)
不多说,直接上干货! 环境说明: 本地没有安装Oracle服务端,oracle服务端64位,是远程连接,因此本地配置PLSQL Developer64位. Oracle database使用在本机部署 ...
- 如何自定义Tomcat Realm实现我们的用户认证需求
导读 Tomcat对于J2EE或Java web开发者而言绝不陌生,但说到Realm,可能有些人不太清楚甚至没有听说过,那么到底什么是Realm?简单一句话就是:Realm是Tomcat中为web应用 ...
- Java集合——HashMap,HashTable,ConcurrentHashMap区别
Map:“键值”对映射的抽象接口.该映射不包括重复的键,一个键对应一个值. SortedMap:有序的键值对接口,继承Map接口. NavigableMap:继承SortedMap,具有了针对给定搜索 ...
- java开发细节问题,spring的单例模式,多线程同步问题
1.对象的赋值,new一个对象,然后在传递给函数赋值,往往这对对象赋值就可以使用了 2.对于 spring开发的细节问题 Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这 ...
- WPF 中动态改变控件模板
在某些项目中,可能需要动态的改变控件的模板,例如软件中可以选择不同的主题,在不同的主题下软件界面.控件的样式都会有所不同,这时即可通过改变控件模板的方式实现期望的功能. 基本方法是当用户点击切换主题按 ...
- 【详解】ThreadPoolExecutor源码阅读(一)
系列目录 [详解]ThreadPoolExecutor源码阅读(一) [详解]ThreadPoolExecutor源码阅读(二) [详解]ThreadPoolExecutor源码阅读(三) 工作原理简 ...