Android Service学习之AIDL实例
2012-12-01 01:29
309 查看
由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。 以下讲对如何实现AIDL调用进行讲解,本文包括AIDL接口调用,回调,以及传递复杂数据类型 Demo运行效果图 Aidl文件 Person.aidl package com.archermind.aidl; parcelable Person; ITaskBinder.aidl package 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.aidl package com.archermind.aidl; interface ITaskCallBack { void onActionBack(String str); } 先看Myservice的代码 服务端实现了AIDL的相关接口,供客户端调用 @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return mBinder; } private final ITaskBinder.Stub mBinder=new ITaskBinder.Stub() { @Override public void unregisterCallBack() throws RemoteException { // TODO Auto-generated method stub Log.v(TAG,"unregisterCallBack..."); mTaskCallBack=null; } @Override public void registerCallBack(ITaskCallBack cb) throws RemoteException { // TODO Auto-generated method stub Log.v(TAG,"registerCallBack..."); mTaskCallBack=cb; } @Override public void fuc01() throws RemoteException { // TODO Auto-generated method stub Log.v(TAG,"fuc01..."); } @Override public void fuc02() throws RemoteException { // TODO Auto-generated method stub Log.v(TAG,"fuc02..."); mTaskCallBack.onActionBack("hello world"); } @Override public String fuc03(Person person) throws RemoteException { // TODO Auto-generated method stub String 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() { @Override public void onActionBack(String str) throws RemoteException { // TODO Auto-generated method stub Log.v(TAG,"onActionBack str="+str); } }; 客户端如何与服务器绑定并建立连接 Intent intent=new Intent("com.archermind.aidl.myservice"); bindService(intent,mConnection,BIND_AUTO_CREATE); private ServiceConnection mConnection=new ServiceConnection(){ @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub mService=ITaskBinder.Stub.asInterface(service); try { mService.registerCallBack(mCallBack); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.v(TAG,"onServiceConnected"); } 详细信息请见附件中的源码工程,希望对大家有用. |
KB, 下载次数: 0)
AidlDemo.zip
相关文章推荐
- Android Service学习之AIDL实例
- Android Service学习之AIDL实例
- 我的Android进阶之旅------>Android Service学习之AIDL, Parcelable和远程服务实例
- Android Service学习之AIDL实例
- Android Service学习之AIDL实例
- 我的Android进阶之旅------>Android Service学习之AIDL, Parcelable和远程服务实例
- Android学习指南之二十二:实例讲解AIDL和远程Service调用
- Android Service学习之AIDL, Parcelable和远程服务
- android hal学习——aidl,java service,jni编写【转】
- Android学习之Service实例
- Android Service学习之AIDL, Parcelable和远程服务
- Android Service学习之AIDL, Parcelable和远程服务
- Android Service学习之AIDL, Parcelable和远程服务
- Android Service学习之AIDL, Parcelable和远程服务
- Android Service学习之AIDL, Parcelable和远程服务
- 我的Android进阶之旅------>Android Service学习之AIDL, Parcelable和远程服务
- Android Service学习之AIDL, Parcelable和远程服务
- Android Service学习之AIDL, Parcelable和远程服务
- 【转载】Android Service学习之AIDL, Parcelable和远程服务
- Android Service学习之AIDL, Parcelable和远程服务