更好的设计Android软件应该熟悉掌握AIDL IPC机制,可以让你编写的组件类似Windows ActiveX COM一样更好的复用,提供类似像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 for Parcelable 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. android:manageSpaceActivity让应用手动管理应用的数据目录
  2. Android sdk manager无法启动之swt.jar文件没有指定
  3. 关于AVD启动失败的问题--找不到文件篇
  4. Android入门篇三:使用静态变量在Activity之间传递数据
  5. android读写assets目录下面的资源文件(文件夹)
  6. Android下修改hosts文件
  7. Android PinyinIME 源码笔记 -- 1. 底层服务接口简介
  8. Android:使用Gson解析复杂的JSON数据
  9. android SD卡学习3-读写文件

随机推荐

  1. Android 上传文件[转]
  2. android studio 65536
  3. android 如何去掉状态栏和标题栏
  4. Android 之 将RAW资源文件写入SD卡工具类
  5. 挂载android只读文件系统为可读写
  6. Android 点击空白区域 软键盘消失
  7. Android EditText 不可编辑到可编辑状态
  8. 一些databinding 赋值小技巧
  9. Android与服务器端数据交互(基于SOAP协议
  10. android如何用代码实现界面ui