进程之间的通信之AIDL
来源:互联网 发布:软件项目经理资格证书 编辑:程序博客网 时间:2024/06/14 14:22
AIDL即Android Interface definition language的缩写,是Android接口定义语言,是IPC进程间通信方式的一种,用于Android设备上两个进程之间进行进程间通信。适用于两个应用之间进行大量数据的传递,分为服务端和客户端,服务端主要提供数据,是被调用的对象,客户端接收数据,是调用的对象。下来我们看看AIDL在Android Studio中的集成使用。
一、服务端
1、在android studio中新建一个Modle作为服务端,起名为AIDLServer。在main文件夹下创建AIDL文件夹,如下:
会创建一个接口,接口名称可以任意修改,接口中提供一些方法,这些方法的作用就是根据客户端和服务端的需求的需求来写的,客户端需要什么数据,就返回什么数据,可以是字符串,集合,对象,json,xml等等格式数据,这里举个例子,假设服务端想接收年龄,返回处理后的年龄给客户端,则可以这样写:
interface ServiceInterface { void setAge(int age); String getAge();}如果还需要其他方法的话,还可以继续添加 。此时,接口就写完了,然后我们编译一下程序,就会在build/generated/source文件夹下生成aidl文件:
2、写一个服务继承自Server。在服务的onBind方法中返回所需要的IBinder数据。
public class MyService extends Service { private int age; public MyService() { } @Override public IBinder onBind(Intent intent) { return new MyIBind(); } public class MyIBind extends ServiceInterface.Stub { @Override public void setAge(int age) throws RemoteException { MyService.this.age = age; } @Override public String getAge() throws RemoteException { return "服务端年龄加10后的年龄:" + (age+10); } }}方法一的setAge就是客户端请求过来的数据,方法二getAge是服务端处理后的数据。
二、客户端
1、在android studio中创建一个Modle模块,作为服务端,把服务端新建的main目录下的AIDL文件拷贝到对应的main目录下,再进行编译。同样会在build/generated/source文件夹下生成aidl文件。
2、在Activity中绑定服务并且启动,注意这个服务开启的是另一个应用程序的服务,并不是自身的服务。
Intent intent = new Intent("testdemo"); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setPackage("com.example.aidlserver"); bindService(intent,conn,BIND_AUTO_CREATE); startService(intent);
private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { ServiceInterface serviceInterface = ServiceInterface.Stub.asInterface(service); try { serviceInterface.setAge(20); String age = serviceInterface.getAge(); Toast.makeText(MainActivity.this,"年龄是:"+age,Toast.LENGTH_SHORT).show(); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } };ServiceConnection有两个方法,一个是服务连接上时,另一个是服务断开时的方法,当调用服务里面的方法时候,传递一个数据给服务端,服务端处理后再调用方法获取处理后的数据后供前台展示。
0 0
- 进程之间的通信之AIDL
- 进程之间的通信AIDL
- aidl进程之间的通信
- Android:AIDL进程之间的通信
- Android AIDL 进程之间的通信
- Android进程之间通信Aidl
- IPC之AIDL -- APK之间进程通信(入门)
- Android进程间的通信之AIDL
- Android.进程间的通信之AIDL
- Android中的进程之间的通信(广播、AIDL、socket)
- Android 使用AIDL实现进程之间的通信(一)
- AIDL进程间通信之AIDL
- Android 进程通信之AIDL
- Android进程通信之AIDL
- Android 进程通信之AIDL
- Android之aidl进程通信
- 进程(app)之间使用aidl通信
- 通信之进程间通信-AIDL
- MySQL索引原理及慢查询优化
- Mysql登录时报 ERROR 1045 (28000)解决
- Zookeeper系列(二十四)Zookeeper原理解析之处理流程
- CSU 1809 Parenthesis(RMQ||线段树)
- CodeForces
- 进程之间的通信之AIDL
- PHP中变量类型之特殊类型:资源类型、空类型
- 剑指Offer
- python基础知识-文件操作
- Yeoman安装和使用详解
- bash中 2>&1 & 的解释
- chrome下清除dns缓存
- jsp 自定义标签详解
- eclipse断点调试方法