AIDL注意细节 简单Demo

服务端

服务端注意细节

  • 不支持short数据类型
  • 支持的数据类型有:int、long、char、boolean、float、double、String、CharSequence、List、Map
  • 除了基本类型外,自定的类型需要我们通过实现Parcelable来序列化
  • 自定义的数据类型所在的包必须与aidl下文件拥有相同的包名
  • 除基本类型外,自定的类型必须标注in、out、inout标示数据的方向。基本类型默认方向为in。通常报错就处于此条

AIDL文件

package com.android.server;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * 自定义数据类型
 */
public class Rectangular implements Parcelable{

    public int left;
    public int right;
    public int top;
    public int bottom;

    public Rectangular(){

    }

    public Rectangular(Parcel in){
        readFromParcel(in);
    }


    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(left);
        dest.writeInt(right);
        dest.writeInt(top);
        dest.writeInt(bottom);
    }

    public void readFromParcel(Parcel in){
        left = in.readInt();
        right = in.readInt();
        top = in.readInt();
        bottom = in.readInt();
    }

    public static final Parcelable.Creator<Rectangular> CREATOR = new Parcelable.Creator<Rectangular>(){

        @Override
        public Rectangular createFromParcel(Parcel source) {
            return new Rectangular(source);
        }

        @Override
        public Rectangular[] newArray(int size) {
            return new Rectangular[size];
        }

    };
}



Rectangular.aidl

package com.android.server;

parcelable Rectangular;



IRemoteService.aidl

package com.android.server;

import com.android.server.Rectangular;

interface IRemoteService {

    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);

    int getArea(in Rectangular rect);

}


客户端

客户端注意细节

  • aidl文件必须与服务端一致,包括包名
  • 服务端每次修改aidl文件之后,必须更新客户端的aidl文件,负责会服务绑定到服务端的服务。


Demo完整实现

https://github.com/xkck/AIDLServer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值