本文转自:http://android.tgbus.com/


更好的设计Android软件应该熟悉掌握AIDL IPC机制,可以让你编写的组件类似Windows ActiveXCOM一样更好的复用,提供类似像Symbian那样的服务器机制。服务可以很好的解决在后台运行无UI的窗口。我们创建一个aidl文件名为android123.aidl下面是示例代码,修改于Android SDK文档。  一、创建AIDL文件
package cn.com.android123;
  引入声明 import cn.com.android123.IAtmService;
// 声明一个接口,这里演示的是银行ATM程序
interface IBankAccountService {

int getAccountBalance(); //返回整数,无参数
void setOwnerNames(in List<String> names); //不返回,包含一个传入List参数
BankAccount createAccount(in String name, int startingDeposit, in IAtmService atmService); //返回一个自定义类型
int getCustomerList(in String branch, out String[] customerList); //返回整形,输入一个分支,输出一个客户列表
}
  二、实现一个接口
  显示的提供一个导出接口,为客户端提供绑定。
public class RemoteService extends Service {
@Override
public IBinder onBind(Intent intent) {
if (IRemoteService.class.getName().equals(intent.getAction())) {
return mBinder;
}
if (ISecondary.class.getName().equals(intent.getAction())) {
return mSecondaryBinder;
}
return null;
} //第一个接口
private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
public void registerCallback(IRemoteServiceCallback cb) {
if (cb != null) mCallbacks.register(cb);
}
public void unregisterCallback(IRemoteServiceCallback cb) {
if (cb != null) mCallbacks.unregister(cb);
}
};//第二个接口
private final ISecondary.Stub mSecondaryBinder = new ISecondary.Stub() {
public int getPid() {
return Process.myPid();
}
public void basicTypes(int anInt, long aLong, boolean aBoolean,
float aFloat, double aDouble, String aString) {
}
};
}
  三、客户端交互
  通过Android.os提供的Parcelable类型来传递数据,通常我们使用Eclipse+ADT插件来完成,在Eclipse中在Package Explorer view视图上单击鼠标右键,选择Create Aidl preprocess file forParcelable classes(创建aidl预编译文件),最终我们创建一个名为android123.aidl文件
import android.os.Parcel;
import android.os.Parcelable;
public final class Rect implements Parcelable {
public int left;
public int top;
public int right;
public int bottom;
public static final Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() {
public Rect createFromParcel(Parcel in) {
return new Rect(in);
}
public Rect[] newArray(int size) {
return new Rect[size];
}
};
public Rect() {
}
private Rect(Parcel in) {
readFromParcel(in);
}
public void writeToParcel(Parcel out) { //当前数据写入到Parcel中
out.writeInt(left);
out.writeInt(top);
out.writeInt(right);
out.writeInt(bottom);
}
public void readFromParcel(Parcel in) { //从Parcel中读取数据
left = in.readInt();
top = in.readInt();
right = in.readInt();
bottom = in.readInt();
}
}

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 读取android手机流量信息
  4. android 使用html5作布局文件: webview跟javascript交互
  5. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  6. android“设置”里的版本号
  7. Android开发环境搭建
  8. Android(安卓)Resource介绍和使用
  9. 2014.01.21 ——— android 关联android-support源码

随机推荐

  1. Android提高二十一篇
  2. 收藏android源码项目
  3. Android(安卓)内存监测工具 DDMS --> Hea
  4. 【Android】getColor(int id)在API23时过
  5. Android(安卓)Handler 深入学习(2)
  6. Android(安卓)自定义时间选择对话框
  7. INSTALL_FAILED_MISSING_SHARED_LIBRARY
  8. Android(安卓)4.0源码下载
  9. Android中的按键监听
  10. android系统设置-修改睡眠时间,修改背光强