AIDL(Android Interface Definition Language)
进程间的通信
1.创建一个.aidl文件,Eclipse自动编译,AndroidStudio手动去编译
package com.pt.aidl;
interface IMyAIDLTest{
int add(int num1,int num2);
}
2.创建一个Service,记得在AndroidManifest中声明且添加
android:exported="true"
android:process=":remote"
android:name=".IRemoteService"
android:label="@string/app_name"
属性。
public class IRemoteService extends Service {
/**
* 当客户端绑定到该服务会调用
*/
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
private IBinder iBinder = new IMyAIDLTest.Stub() {
@Override
public int add(int num1, int num2) throws RemoteException {
Log.d("TAG","收到远程客户数据,参数是:num1 = " + num1 + ",num2 = " + num2);
return num1 + num2;
}
};
}
3.创建一个客户端程序
简单的加法:
复制服务端的.aidl文件
然后在客户端启动时绑定服务
private void bindService() {
//获取服务端
Intent intent = new Intent();
//新版本5.0 必须显示启动,绑定服务
intent.setComponent(new ComponentName("com.pt.aidltest", "com.pt.aidltest.IRemoteService"));
//绑定了自动生成
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
4.conn作为成员变量
实现它的方法将service转为IMyAIDLTest接口
//拿到远程的服务iMyAIDLTest为成员变量,service为服务端返回的IBinder
iMyAIDLTest = IMyAIDLTest.Stub.asInterface(service);
5.调用iMyAIDLTest远程服务的方法,记得在OnDestroy()中释放资源unBindService(conn)
除了short类型。
in List<String> aList; //标记in,out,inout
List 是个接口,客户端接收转为实例ArrayList
自定义类型
1.Person implement Parcelable
//读入和写入的顺序相同
public Person(Parcel source){
this.name = source.readString(),
this.age = source.readInt();
}
2.创建一个Person.aidl文件,声明Person类
package com.pt.aidl;
parcelable Person;
3.在要应用的.aidl文件中
package com.pt.aidl;
import com.pt.aidl.Person;
interface IMyAIDL{
List<Person> add(in Person person);
}
原理:
相关推荐
安卓简单的aidl调用,实现俩个进程之间的数值传递,运行时,先运行service,再运行client,最后在client程序的日志中可看到由service中传递过来的值!
AIDL:Android Interface Definition Language,即Android接口定义语言。 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他...
本人亲手编写AIDL应用实例,简单易学,易上手
关于aidl的简单实现 程序中开启了两个进程 进行通信 所以不需要复制aidl文件到另一个程序中 比较简单 详情可参考我的这篇博客 http://blog.csdn.net/u012760183/article/details/51397014
Android 应用开发源码 参考和学习使用
AidlDemo(简单aidl的例子).zip项目安卓应用源码下载AidlDemo(简单aidl的例子).zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
使用的是studio的,可以大概了解AIDL的使用和service的启动,内容比较简单。
十分简单的代码,旨在说明AIDL的使用。AIDL用于跨经常的通信,不同应用互享数据。
源码参考,欢迎下载
和博客文章http://blog.163.com/zhou_411424/blog/static/197362156201241541451/...对应改编的例子,实现了在一个APP1中通过AIDL远程调用另一个APP2的Service的函数,即使APP2没有被启动过! 均在eclipse编译运行通过。
**最近我学习到安卓AIDL这篇文章,我又翻阅大佬的一些文章,整合我自己的了解来简单详解这篇文章。 AIDL简介 AIDL是 Android Interface definition language的缩写,我们从中可以看出有Interface,我们才知道AIDL是...
aidl 简单demo 在两个应用间传输笔迹 包含aidl的简单运用和画布的简单实现
Android 应用项目开发源码 参考和学习使用
aidl 简单demo 在两个应用间传输笔迹 包含aidl的简单运用和画布的简单实现
AndroidAidlDemo(简单aidl的例子).zip项目安卓应用源码下载AndroidAidlDemo(简单aidl的例子).zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
Android 应用项目开发源码 参考和学习使用
Android AIDL用法介绍, 可以简单了解AIDL的实现机制,应用到实际项目中。
该资源包含了一个用AIDL实现的简单应用,一个应用程序可以访问另外一个应用的方法,并且传递基本数据类型和自定义的数据类型。简单易懂,喜欢的下载!
这里简单介绍下进程的概念,进程是一个程序或者应用的实体,每个进程都拥有自己独立的内存地址空间。官方文档上讲,为进行通信,进程需将其对象分解成可供操作系统理解的原语,并将其编组为可供您操作的对象。编写...
一个应用启动另一个应用 重点:保证包名,和启动activity正确; 实现应用间通讯,用bundle就行了 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...