;); }} 配置文件AndroidManifest.xml和上面的类似,没有区别。 在Activity中使用服务的差别不大,只需要对ServiceConnection中的调用远程服务的方法时,要捕获异常。 private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { countService = (ICountService) service; try { Log.v("CountService", "on serivce connected, count is " + countService.getCount()); } catch (RemoteException e) { throw new RuntimeException(e); } } @Override public void onServiceDisconnected(ComponentName name) { countService = null; } }; 这样就可以在同一个应用程序中使用远程服务的方式和自己定义的服务交互了。 如果是另外的应用程序使用远程服务,需要做的是复制上面的aidl文件和相应的包构到应用程序中,其他调用等都一样。 编写传递复杂数据类型的远程服务远程服务往往不只是传递java基本数据类型。这时需要注意android的一些限制和规定: 1.android支持String和CharSequence 2.如果需要在aidl中使用其他aidl接口类型,需要import,即使是在相同包结构下; 3.android允许传递实现Parcelable接口的类,需要import; 4.android支持集合接口类型List和Map,但是有一些限制,元素必须是基本型或者上述三种情况,不需要import集合接口类,但是需要对元素涉及到的类型import; 5.非基本数据类型,也不是String和CharSequence类型的,需要有方向指示,包括in、out和inout,in表示由客户端设置,out表示由服务端设置,inout是两者均可设置。 这里将前面的例子中返回的int数据改为复杂数据类型: package com.easymorse; import android.os.Parcel;import android.os.Parcelable; public class CountBean implements Parcelable { public static final Parcelable.Creator<CountBean> CREATOR = new Creator<CountBean>() { @Override public CountBean createFromParcel(Parcel source) { CountBean bean = new CountBean(); bean.count = source.readInt(); return bean; } @Override public CountBean newArray(int size) { return new CountBean[size]; } }; public int count; @Override public void writeToParcel(Parcel