【每日话题】国庆放假期间的苦逼事,欢乐事!
http://www.eoeandroid.com/thread-204909-1-1.html

随手记源码啊!!忘记哪里的啦,给大家分享一下
http://www.eoeandroid.com/thread-203718-1-1.html

一个触摸界面会产生小气泡的例子
http://www.eoeandroid.com/thread-203665-1-1.html

由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。

以下讲对如何实现AIDL调用进行讲解,本文包括AIDL接口调用,回调,以及传递复杂数据类型

Demo运行效果图

Aidl文件

Person.aidlpackage com.archermind.aidl;parcelable Person;ITaskBinder.aidlpackage com.archermind.aidl;import com.archermind.aidl.ITaskCallBack;import com.archermind.aidl.Person;interface ITaskBinder {void fuc01();void fuc02();String fuc03(in Person person);void registerCallBack(ITaskCallBack cb);void unregisterCallBack();}ITaskCallBack.aidlpackage com.archermind.aidl;interface ITaskCallBack {void onActionBack(String str);}

先看Myservice的代码
服务端实现了AIDL的相关接口,供客户端调用

@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn mBinder;}private final ITaskBinder.Stub mBinder=new ITaskBinder.Stub() {@Overridepublic void unregisterCallBack() throws RemoteException {// TODO Auto-generated method stubLog.v(TAG,"unregisterCallBack...");mTaskCallBack=null;}@Overridepublic void registerCallBack(ITaskCallBack cb) throws RemoteException {// TODO Auto-generated method stubLog.v(TAG,"registerCallBack...");mTaskCallBack=cb;}@Overridepublic void fuc01() throws RemoteException {// TODO Auto-generated method stubLog.v(TAG,"fuc01...");}@Overridepublic void fuc02() throws RemoteException {// TODO Auto-generated method stubLog.v(TAG,"fuc02...");mTaskCallBack.onActionBack("hello world");}@Overridepublic String fuc03(Person person) throws RemoteException {// TODO Auto-generated method stubString name=person.getName();String descrip=person.getDescrip();int sex=person.getSex();String ret="";if(sex==0){ret="Hello "+name+",you are handsome"+"("+descrip+")";}else{ret="Hello "+name+",you are beautiful"+"("+descrip+")";}return ret;}};


客户端实现回调接口

private final ITaskCallBack.Stub mCallBack=new ITaskCallBack.Stub() {@Overridepublic void onActionBack(String str) throws RemoteException {// TODO Auto-generated method stubLog.v(TAG,"onActionBack str="+str);}};

客户端如何与服务器绑定并建立连接

Intent intent=new Intent("com.archermind.aidl.myservice");bindService(intent,mConnection,BIND_AUTO_CREATE);private ServiceConnection mConnection=new ServiceConnection(){@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubmService=ITaskBinder.Stub.asInterface(service);try {mService.registerCallBack(mCallBack);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}Log.v(TAG,"onServiceConnected");}

详细信息请见附件中的源码工程,希望对大家有用.

更多相关文章

  1. Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理
  2. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  3. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  4. Android学习博客链接
  5. Handler与Android进程管理
  6. android Binder工作流程
  7. 调用Android系统“应用程序信息(Application Info)”界面
  8. Android(安卓)GestureDetector详解
  9. Android(安卓)源码分析

随机推荐

  1. Android 控件的显示隐藏上下左右移动动画
  2. Android复制粘贴到剪贴板
  3. Android(安卓)API 28 使用 android-async
  4. Android Wear Preview- 从通知上接收语音
  5. Android 开源框架的收集
  6. 网络书签about Android
  7. Android UI详解之动态布局
  8. android aidl通讯两个APP之间的应用
  9. android读写文件
  10. C# mono android 图片上传进度条实现