关于AIDL的使用---- Android 进程间通讯之一
2016-07-11 11:13
501 查看
关于AIDL的使用---- Android 进程间通讯之一
AIDL AndroidInterface Definition Language,即Android接口定义语言
由于进程间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。
其中AIDL是方法之一,一般都是配合service来进行跨进程通讯,单独AIDL无法通信。
关于AIDL的使用,一般分为server和client端。
Server的实现步骤如下:
1, 在server端生成一个以”.aidl”结尾的文件,定义接口,如下:
![](http://img.blog.csdn.net/20160711111852926?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
接口内容如下:
2,
编译完成后会在gen目录下生成一个同样目录的文件,文件名为IRemoteService.java, 如下:
![](http://img.blog.csdn.net/20160711110350395?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3, 定义一个service TAService, 实现 IRemoteService里的接口
4, 然后需要在server app 的AndroidManifest.xml 里面声明对应的service
Client 端实现步骤如下:
5, 定义一个和server端同一目录的aidl文件
![](http://img.blog.csdn.net/20160711110354614?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
文件内容必须和server端的 文件内容一模一样,包括参数名称
6, 在对应调用TAService的activity中定义ServiceConnection,实现对应接口,代码如下:
7, 绑定Server端的TAService,代码如下:
完成上述步骤以后即可在conn 的回调中执行aidl接口
执行client代码之前首先要执行server端apk,保证TAService已经跑起来,否则client端绑定失败, conn的两个回调函数都跑不起来。
由此可见, AIDL支持跨进程间接口调用,不支持静态数据读取。
demo 代码下载地址如下:
http://download.csdn.net/detail/kuanxu/9572698
AIDL AndroidInterface Definition Language,即Android接口定义语言
由于进程间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。
其中AIDL是方法之一,一般都是配合service来进行跨进程通讯,单独AIDL无法通信。
关于AIDL的使用,一般分为server和client端。
Server的实现步骤如下:
1, 在server端生成一个以”.aidl”结尾的文件,定义接口,如下:
接口内容如下:
package com.example.server; interface IRemoteService { int getPid(); }
2,
编译完成后会在gen目录下生成一个同样目录的文件,文件名为IRemoteService.java, 如下:
3, 定义一个service TAService, 实现 IRemoteService里的接口
package com.example.server; import com.example.server.IRemoteService; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.Process; import android.util.Log; public class TAService extends Service { private static String TAG = "AIDLServer"; @Override public void onCreate() { super.onCreate(); Log.i(TAG," onCreate........" + "Thread: " + Thread.currentThread().getName()); } @Override public IBinder onBind(Intent arg0) { Log.i(TAG,"DDService onBind"); return mBinder; } private final IRemoteService.Stub mBinder = new IRemoteService.Stub() { public int getPid(){ Log.i(TAG,"Thread: " + Thread.currentThread().getName()); Log.i(TAG," getPid "); return Process.myPid(); } }; }
4, 然后需要在server app 的AndroidManifest.xml 里面声明对应的service
<service android:name="com.example.server.TAService" android:enabled="true" android:exported="true" > </service>
Client 端实现步骤如下:
5, 定义一个和server端同一目录的aidl文件
文件内容必须和server端的 文件内容一模一样,包括参数名称
package com.example.server; interface IRemoteService { int getPid(); }
6, 在对应调用TAService的activity中定义ServiceConnection,实现对应接口,代码如下:
ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { remoteService = IRemoteService.Stub.asInterface(service); try { int pid = remoteService.getPid(); int currentPid = Process.myPid(); Log.i(TAG,"currentPID: " + currentPid +" remotePID: " + pid); } catch (RemoteException e) { e.printStackTrace(); Log.i(TAG,"RemoteException"); } Log.i(TAG,"bind success! " + remoteService.toString()); } };
7, 绑定Server端的TAService,代码如下:
Intent intent = new Intent(); ComponentName comp = new ComponentName("com.example.server", "com.example.server.TAService"); intent.setComponent(comp); bindService(intent, conn, Context.BIND_AUTO_CREATE);
完成上述步骤以后即可在conn 的回调中执行aidl接口
执行client代码之前首先要执行server端apk,保证TAService已经跑起来,否则client端绑定失败, conn的两个回调函数都跑不起来。
由此可见, AIDL支持跨进程间接口调用,不支持静态数据读取。
demo 代码下载地址如下:
http://download.csdn.net/detail/kuanxu/9572698
相关文章推荐
- Android IPC进程间通讯机制
- android之定时器AlarmManager
- 如何使用 bind 设置 DNS 服务器
- Seafile Server本地权限提升漏洞(CVE-2014-5443)
- 从USB安装Ubuntu Server 10.04.3 图文详解
- axis备忘
- 使用zabbix监控Nginx活动状态--Part1
- 高效访问Internet-启用ISA Server的缓存
- windows server域用户提升到本地更高权限组中的方法
- 完美解决SQL Server 安装问题:以前的某个程序安装已在安装计算机上创建挂起的文件操作
- IIS 错误 Server Application Error 详细解决方法
- 在WINXP系统上安装SQL Server企业版的方法
- SQL Server 存储过程的分页
- SQL Server复制需要有实际的服务器名称才能连接到服务器
- SQL Server 2000向SQL Server 2008 R2推送数据图文教程
- SQL server 表操作介绍
- SQL Server 2000 注入防护大全(二)
- SQL Server 2000 注入防护大全(一)
- 怎样把Windows server 2003转换成工作站系统
- Windows Server 2007四月CTP发布 下载