首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

写给菜鸟,Android AIDL必看内容

2012-09-25 
写给初学者,Android AIDL必看内容本文转自:http://android.tgbus.com/更好的设计Android软件应该熟悉掌握A

写给初学者,Android AIDL必看内容
本文转自: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();
    }
}

热点排行