Android中AIDL的使用
2016-04-20 20:48
495 查看
Android Interface definition language:是Android系统中IPC通讯的一种方式,也就是进程间通讯的一种方式,通过AIDL描述的接口,可以实现两个进程之间的相互通讯,这两个进程一般称为服务端和客户端,客户端即向服务端发送数据,服务端得到客户端发送过来的数据后,返回给客户端结果。
AIDL的实现步骤:
1.在Server端定义一个.aidl文件,并在该文件中定义一个接口,这步完成之后,会自动在gen文件夹中生成把.aidl文件编译成Java代码;
2.在server端创建Service类,并实现该接口;
3.把接口暴露给Client端,从而进行数据通讯;
具体实现:
1.在Server端定义一个.aidl文件,并在该文件中定义一个接口:
2.在server端创建Service类,并实现该接口:
当点击按钮时,进行绑定服务,从而进行Server端与Client端之间的通讯,先运行Server端,然后运行Client端,点击按钮,Log成功打印,说明服务器成功返回给Client信息:
项目结构如下:
AIDL的实现步骤:
1.在Server端定义一个.aidl文件,并在该文件中定义一个接口,这步完成之后,会自动在gen文件夹中生成把.aidl文件编译成Java代码;
2.在server端创建Service类,并实现该接口;
3.把接口暴露给Client端,从而进行数据通讯;
具体实现:
1.在Server端定义一个.aidl文件,并在该文件中定义一个接口:
package com.aidl; interface IServer{ String getInfo(String info); }注意:这里包名必须合适;
2.在server端创建Service类,并实现该接口:
public class MyService extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return binder; } IBinder binder=new IServer.Stub() { @Override public String getInfo(String info) throws RemoteException { // TODO Auto-generated method stub if("client".equals(info)){ return "服务端已成功接收"; } return null; } }; }3.把接口暴露给Client端:
public class MainActivity extends Activity implements OnClickListener { private Button button; private Intent intent; private MyConn conn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button) findViewById(R.id.button); button.setOnClickListener(this); conn=new MyConn(); } @Override public void onClick(View v) { intent=new Intent("server"); switch (v.getId()) { case R.id.button: //绑定服务 bindService(intent, conn, Context.BIND_AUTO_CREATE); break; default: break; } } /** * * 实现SerViceConnection,必须重写以下两个方法 * */ class MyConn implements ServiceConnection{ /** * 与服务连接成功时回调 */ @Override public void onServiceConnected(ComponentName name, IBinder service) { IServer iServer=IServer.Stub.asInterface(service); try { String result=iServer.getInfo("client"); Log.i("TAG", "reult="+result); } catch (RemoteException e) { e.printStackTrace(); } } /** * 断开连接时回调 */ @Override public void onServiceDisconnected(ComponentName name) { } } @Override protected void onDestroy() { super.onDestroy(); //解除服务绑定 unbindService(conn); } }
当点击按钮时,进行绑定服务,从而进行Server端与Client端之间的通讯,先运行Server端,然后运行Client端,点击按钮,Log成功打印,说明服务器成功返回给Client信息:
项目结构如下:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析