文档章节

使用Parcelable传递复杂参数

火云
 火云
发布于 2018/07/17 19:18
字数 421
阅读 27
收藏 0

最近做AIDL传递对象,对象必须实现Parcelable的方法才可以被传递。

@Override
    public int describeContents() {//这个 默认返回0就行了。
        return 0;
    }

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

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

实现方法中的读取和写入必须按顺序,并且写入是什么类型的,读取时候必须使用什么类型,否则也会出问题。

例如:

protected PersonData(Parcel in) {
        age = in.readInt();
        name = in.readString();
        gender = in.readInt();
        nation = in.readString();
        smile = in.readInt() != 0;//boolean 值  需要转换一下   
        avatar = Bitmap.CREATOR.createFromParcel(in);// bitmap本身已经实现了Parcelable方法,所以直接调用他自身的方法。
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(age);
        dest.writeString(name);
        dest.writeInt(gender);
        dest.writeString(nation);
        dest.writeInt(smile ? 1 : 0);
        avatar.writeToParcel(dest, 0);
    }

写好对象类后,需要再写一个aidl注册类PersonData.aidl。就2行代码

package com.ads.sensetime.sdk.app.bean;

parcelable PersonData;

aidl接口中,需要手动import 这个类。

并且在使用时候在传参前标注“in”,“out”,“inout”

in:客户端的参数输入;

out:服务端的参数输入;

inout:这个可以叫输入输出参数,客户端可输入、服务端也可输入。客户端输入了参数到服务端后,服务端也可对该参数进行修改等,最后在客户端上得到的是服务端输出的参数。

例如:

import com.ads.sensetime.sdk.app.bean.PersonData;

interface IMyAidlInterface {
   void test(in PersonData person);
}

客户端使用时,把所有aidl放到客户端的相同包名下,build一下就OK了。

© 著作权归作者所有

共有 人打赏支持
下一篇: 摄像头的坑
火云
粉丝 4
博文 86
码字总数 10340
作品 0
西城
Android工程师
私信 提问
[Android] Android使用序列化接口Parcelable、Serializable

在Android开发过程中,经常要在Activity之间传递参数,使用Android系统提供的方法可以传递基本数据类型的变量,但有时候我们经常要传递一些复杂的数据类型或自定义的类,这种情况的参数无法直...

枫兮兮
2014/03/11
0
0
Android中Parcelable接口用法总结

Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel。Classes implementing the Parcelable interface must also have a static field c......

____追梦人
2016/01/28
112
0
Android Parcelable接口

1、实现Parcelable就是为了进行序列化,那么,为什么要序列化? 1)永久性保存对象,保存对象的字节序列到本地文件中; 2)通过序列化对象在网络中传递对象; 3)通过序列化在进程间传递对象...

SRain215
2016/04/27
23
0
Android中Parcelable接口用法

Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel。 Classes implementing the Parcelable interface must also have a static field ......

AlexMahoneFBI
2015/03/09
0
0
Android传递List的用法

日常的开发过程中,我们经常需要通过Intent和Binder传输数据,Object 类型不能直接传递,需要通过序列化。序列化是将对象状态转换为可保持或传输的格式,包括Parcelable和Serializable两种方...

充电实践
2018/05/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Temp-Memo

Recommended Ref : SQL High CPU troubleshooting checklist -- Top 50 SQL highly consuming cpuSELECT TOP 50[Avg. MultiCore/CPU time(sec)] = qs.total_worker_time / 1000000 / qs......

Goopand
27分钟前
1
0
dotConnect for Oracle入门指南(七):存储过程

【下载dotConnect for Oracle最新版本】 dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提供完整的解决方案。它为设计应用程序结构带来了新的...

电池盒
28分钟前
2
0
如何使用阿里云ARMS轻松重现用户浏览器问题

客户投诉不断,本地却无法重现? 页面加载较慢是用户经常会反馈的问题,也是前端非常关注的问题之一。但定位、排查解决这类问题就通常会花费非常多的时间,主要原因如下: 页面是在用户端的浏...

阿里云官方博客
32分钟前
1
0
因资源用尽导致服务宕机

1. 事故的发生 服务调用场景和发生的事件如下图所示,红色表示服务不可用. 服务A和服务B都是内部服务,服务C_*为不同运营商提供的服务,遵循一样的协议。 某一天,突然发现所有服务A调用服务...

北风刮的不认真了
36分钟前
3
0
锤子科技"临死前"被"接盘" ,内部人士爆料已改签今日头条母公司

就在昨天,据据锤子科技内部人士透露,部分锤子科技员工在昨天已经接到了相关的临时通知,要求改签劳动合同至今日头条的母公司——字节跳动。至于这是锤子科技真正再度复活还是借尸还魂都不重...

终端研发部
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部