更好的设计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系统集成第三方pre-build库和程序
  2. 谈谈Android的so
  3. Android系统上部署usb打印机
  4. Android中MVP模式
  5. android全格式多媒体播放器(一:ffmpeg移植)
  6. 教你如何在 Android(安卓)使用多线程下载文件
  7. Android中的Apk的加固(加壳)原理解析和实现
  8. Android(安卓)Studio 打包jar,aar
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)sqlite数据库加密
  2. Android初识之简易计算器
  3. ListView(二)
  4. Android(安卓)View 仿iOS SwitchButton
  5. Android简单语音控制应用的实现
  6. Android 蓝牙调色灯/zigbee调色灯学习开
  7. Android中_TextView属性的XML详解 包括单
  8. Android -- Layout布局文件里的android:l
  9. Linux ubuntu repo安装方法
  10. Android应用程序的组成介绍