理解AIDL中的in,out,inout

本文详细探讨了Android AIDL中的in, out, inout参数的区别。通过实例验证,展示了它们在数据传输和服务端修改客户端数据时的行为。结论指出,in允许数据从客户端传入服务端,out允许数据从服务端传出,而inout则同时允许数据进出。测试代码可参考链接。" 51024402,5010507,解决CentOS C++程序内存错误:segmentation fault,"['内存', 'linux', 'C++']
摘要由CSDN通过智能技术生成

最后一次更新:2018-3-25

  • android测试版本:Android O
  • 内容:验证Android AIDL中的tag(in out inout)

前言

android AIDL有3种不同的tag,在总结之前先参考了这篇博客 https://blog.csdn.net/luoyanglizi/article/details/51958091
但是发现还是不够,于是又自己研究了一下,总结出这篇文档。如果有错误的话希望指正。

验证

IPostMsg.aidl

package aidl;
import aidl.MsgBody;
interface IPostMsg {
    void setMsg(String msg);
    //(1)没有声明out能返回吗? == 能
    MsgBody getMsg1();

    //(2)out 不能传入,服务端能修改客户端的b参数
    MsgBody getMsg2(out MsgBody b);

    //(3)in 能传入,服务端不能修改客户端的b参数
    MsgBody getMsg3(in MsgBody b);

    //(4)inout 能传入,服务端能修改客户端的b参数
    MsgBody getMsg4(inout MsgBody b);
}

MsgBody.aidl

package aidl;
parcelable MsgBody;
package aidl;
import android.os.Parcel;
import android.os.Parcelable;
public class MsgBody implements Parcelable {
   
    public String msgContext;
    public int msgId;

    public MsgBody() {}

    protected MsgBody(Parcel in) {
        readFromParcel(in);
    }

    public static final Creator<MsgBody> CREATOR = new Creator<MsgBody>() {
        @Override
        public MsgBody createFromParcel(Parcel in) {
            return new MsgBody(in);
        }

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

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

    /**
     * @param dest
     * @param flags flags=PARCELABLE_WRITE_RETURN_VALUE:表示该对象从服务端返回客户端
     *              flags=PARCELABLE_ELIDE_DUPLICATES 程序内部复制变量的时候
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(msgContext);
        dest.writeInt(msgId);
    }

    public void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值