android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。Android平台对可通过进程通信(IPC)机制进行传递的数据定义进行约定,这些数据类必须实现Parcelable接口,且必须包含一个类型为Parcelable.Creator且名为CREATOR的公共静态成员。只有实现Parcelable接口的类才能以意向的扩展数据进行传递。

实现于Parcelable接口的CREATOR成员的createFromParcel方法用于告诉平台如何从包裹里创建该类的实例,而writeToParcel方法则用于告诉平台如何将该类的实例存储到包裹中。通过接口队成员的约定,Android平台可获知数据类的数据读取和写入的接口,从而进行对象的实例化和持久化,该过程如下图:

示例代码如下:

public class Person implements Parcelable{
    private String name;
    private String phone;
    //必须包含一个类型为Parcelable.Creator且名为CREATOR的公共静态成员
    private static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel source) {//该方法用于告诉平台如何从包裹里创建数据类实例
            return new Person(source);
        }
        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
    public Person(String name,String phone){
        this.name = name;
        this.phone = phone;
    }
    public Person(Parcel in){
        this.name = in.readString();
        this.phone = in.readString();
    }
    @Override
    public int describeContents() {
        return 0;
    }
     
    /**
     * 告诉平台如何将数据实例写入Parcel里
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.getName());
        dest.writeString(this.getPhone());
    }
    /**
     * 属性的set和get方法
     * @return
     */
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
     
 
}

Android---Parcelable包装类的作用的更多相关文章

  1. 【Android Studio安装部署系列】四、Android SDK目录和作用分析

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android SDk Tool软件开发工具包(software development kit).被软件开发工程师用于为特定的软件 ...

  2. Android Parcelable和Serializable的区别,androidparcelable

    本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存 ...

  3. Android Parcelable理解与使用(对象序列化)

    http://my.oschina.net/zhoulc/blog/172163 parcel定义介绍: android提供了一种新的类型:parcel(英文解释:包裹,小包),本类用来封装数据的容器 ...

  4. Android Parcelable和Serializable的区别

    本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存 ...

  5. [转]Android Parcelable和Serializable的区别

    本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存 ...

  6. android:clipChildren属性的作用

    该属性默认为true,这个属性需要添加到最顶层的ViewGroup,作用是控制子View是否可以超出它所在的父View设定的边界 比如ImageView设置高度100dp,而它所在的父View设置的高 ...

  7. [Android]Parcelable encountered IOException writing serializable object (name = xxx)

    Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.short ...

  8. android学习19--Matrix.mapPoints作用

    android图形的旋转,缩放,平移都是用matrix实现的.可以用mapPoints来计算一个点旋转,缩放,平移后的坐标.看下面例子. Matrix matrix = new Matrix(); m ...

  9. Android Parcelable using Kotlin

    Kotlin 有 extension 可以很方便的让类继承 Parcelable 接口. 项目中引入一个较新版本的 Kotlin 引入 Kotlin extensions classpath &quo ...

随机推荐

  1. 新任 CEO 致员工公开信:微软下一步做什么?

    在微软宣布纳德拉成为新任 CEO 之后,全体微软员工收到了新掌门人的公开信,我们来看看他在信中都写了些什么?   我是谁?   我今年 46 岁,结婚已经 22 年了,现在有三个孩子.和其他人一样,我 ...

  2. iOS打包app发给测试人员测试

    说明:在项目开发过程中经常需要开发人员将项目打包成ipa包后,发给测试人员进行测试.本文贴图对打包的过程简单介绍. 一.Product ->archive (注意,不能是模拟器状态,如果当前调试 ...

  3. vs2013执行Add-Migration出现的问题

    1. 无法将"Add-Migration"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次 网上解决方法为:h ...

  4. PAC全自动脚本代理

    Proxy 极低成本绕过GFW的一个PAC代理 Download proxy.zip Proxy 轻量级的FQ工具,不需要安装客户端.可以设置系统代理,也可以设置浏览器代理或者配合SS等插件使用. 免 ...

  5. .Net下HTTP访问穿越多层代理的方法以及代理服务器的验证 转载

    https://blog.williamgates.net/2006/07/aspdotnet-through-multi-proxy/ 首先,通过普通的匿名透明代理的方法,是直接使用Socket发送 ...

  6. Replication--进程无法在“xxxx”上执行“sp_replcmds”

    错误消息:进程无法在“xxxx”上执行“sp_replcmds”. (源: MSSQL_REPL,错误号: MSSQL_REPL20011)获取帮助: http://help/MSSQL_REPL20 ...

  7. Linux网卡配置与绑定

    一定要在服务管理中关闭NetworkManager服务并禁用自动启动. 第一步:先查看下本机网卡,使用命令到network-scripts 下 [root@root~]# cd /etc/syscon ...

  8. String.valueOf(int i)和Integer.toString(int i)有什么区别?

    以下是2个人的回答,我是从百度上复制下来的,做个笔记,以后方便看 String.valueOf()它可以将JAVA基本类型(int,double,boolean等)和对象(Object)转换成Stri ...

  9. CDockablePane 记忆界面布局的问题

    CWinAppEx类的LoadCustomState()和SaveCustomState()用于向注册表读取和保存应用程序的界面信息,重载该方法可以取消自动记忆界面布局. void CxxxApp:: ...

  10. Android中自定义veiw使用Java中的回调方法

    //------------------MainActivity----中---------------------------------- import android.os.Bundle;imp ...