java编程中,为了将对象的状态保存,需要将对象序列化。

在android中,序列化有两种方法可供选择,一个是java自带的序列化方法,只需实现Serializeable接口即可;另一个是android提供的方法,要实现Parcelable接口,并实现其中的一些方法,相对要复杂一些。

两者区别:

Parcelable消耗内存少,更加高效。

Serializeable更适合长期保存数据,和网络传输。

下面主要讲解Parceable的使用。

将想要序列化的对象的类实现Parcelable接口,并实现其中的方法:

public class MyParcelable implements Parcelable {
int mData; public MyParcelable(int mData){
this.mData=mData;
} public int describeContents() {
return 0;
} //将对象打包为Parcel类型对象
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
} //将Parcel对象解压为MyParcelable对象
public static final Creator<MyParcelable> CREATOR
= new Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
} public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
}; //从Parcel对象中读取数据
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}

在MainActivity中添加到Intent中,并传递:

        Intent intent = new Intent(MainActivity.this, SecActivity.class);
Bundle bundle = new Bundle();
MyParcelable myParcelable = new MyParcelable(99);
bundle.putParcelable("myParcelable", myParcelable);
intent.putExtras(bundle);
startActivity(intent);

  

在SecActivity中获取:

MyParcelable myParcelable=getIntent().getParcelableExtra("myParcelable");

如果新类型中的成员的数据类型为数组、List、Map或自定义类型时:

public class UserInfo implements Parcelable {

    int age;
MyType[] hobbies;
MyType myType;
List<MyType> list;
HashMap<String, MyType> map; public UserInfo(int age, MyType[] hobbies, MyType myType, List<MyType> list, HashMap<String, MyType> map) {
this.age = age;
this.hobbies = hobbies;
this.myType = myType;
this.list = list;
this.map = map;
} protected UserInfo(Parcel in) {
age = in.readInt();
hobbies = in.createTypedArray(MyType.CREATOR);
myType = in.readParcelable(MyType.class.getClassLoader());
list = in.createTypedArrayList(MyType.CREATOR);
map=in.readHashMap(HashMap.class.getClassLoader());
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(age);
dest.writeTypedArray(hobbies, flags);
dest.writeParcelable(myType, flags);
dest.writeTypedList(list);
dest.writeMap(map);
} @Override
public int describeContents() {
return 0;
} public static final Creator<UserInfo> CREATOR = new Creator<UserInfo>() {
@Override
public UserInfo createFromParcel(Parcel in) {
return new UserInfo(in);
} @Override
public UserInfo[] newArray(int size) {
return new UserInfo[size];
}
}; @Override
public String toString() {
return "UserInfo{" +
"age=" + age +
", hobbies=" + Arrays.toString(hobbies) +
", myType=" + myType +
", list=" + list +
", map=" + map +
'}';
}
}
public class MyType implements Parcelable{

    String name;
int age; public MyType(String name, int age) {
this.name = name;
this.age = age;
} protected MyType(Parcel in) {
name = in.readString();
age = in.readInt();
} public static final Creator<MyType> CREATOR = new Creator<MyType>() {
@Override
public MyType createFromParcel(Parcel in) {
return new MyType(in);
} @Override
public MyType[] newArray(int size) {
return new MyType[size];
}
}; @Override
public int describeContents() {
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
} @Override
public String toString() {
return "MyType{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

android之Parcelable的更多相关文章

  1. Android 使用Parcelable序列化对象

    转:http://ipjmc.iteye.com/blog/1314145       Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现 ...

  2. android 开发Parcelable 怎么传值ArrayList

    public class TradeEntity implements Parcelable{ public String id; //有关进度条的参数 ArrayList<TradeState ...

  3. Android中Parcelable序列化总结

    在使用Parcelable对android中数据的序列化操作还是比较有用的,有人做过通过对比Serializable和Parcelable在android中序列化操作对象的速度比对,大概Parcela ...

  4. Android接口Parcelable的使用

    注明:非原创,转载,原链接地址为:http://www.2cto.com/kf/201205/132814.html 和 http://www.blogjava.net/lincode/archive ...

  5. Android API之android.os.Parcelable

    android.os.Parcelable Interface for classes whose instances can be written to and restored from a Pa ...

  6. Android中Parcelable与Serializable接口用法

    转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...

  7. Android中Parcelable的使用

    转载请标明出处 :https://www.cnblogs.com/tangZH/p/10998065.html  Parcelable与Serializable Serializable是Java为我 ...

  8. android基础---->Parcelable的使用

     android中Parcelable序列化的使用,简单的记录一下. 目录导航: Serializable在android中的使用 Parcelable在android中的使用 Serializabl ...

  9. Android中Parcelable的原理和使用方法

    Parcelable的简单介绍 介绍Parcelable不得不先提一下Serializable接口,Serializable是Java为我们提供的一个标准化的序列化接口,那什么是序列化呢? 进行And ...

  10. Android 的Parcelable接口

    此文转载自http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html 1. Parcelable接口 Interface ...

随机推荐

  1. DDD实战课--学习笔记

    目录 学好了DDD,你能做什么? 领域驱动设计:微服务设计为什么要选择DDD? 领域.子域.核心域.通用域和支撑域:傻傻分不清? 限界上下文:定义领域边界的利器 实体和值对象:从领域模型的基础单元看系 ...

  2. JMeter扩展Java请求实现WebRTC本地音视频推流压测脚本

    WebRTC是Web Real-Time Communication缩写,指网页即时通讯,是一个支持Web浏览器进行实时语音或视频对话的API,实现了基于网页的视频会议,比如声网的Agora Web ...

  3. Mardown语法

    1.什么是Markdown Mardown是一种文本标记语言,使用它,能让我们更加专注于内容的输出,而不是排版样式. 我们平常使用的.txt文档书写的文字是没有样式的,使用Markdown语法就可以给 ...

  4. 2019第十届蓝桥杯省赛及国赛个人总结(java-B组)

    省赛: 今年省赛的题目比18年简单的多,基本都是暴力枚举.BFS之类.还记得去年在山师考蓝桥杯,我这种辣鸡连题目都没看懂.本以为蓝桥会变得越来越难,没想到今年就被打脸了.今年省赛后面三个编程大题一个没 ...

  5. 一文读懂MySql主从复制机制

    作为一个关系型数据库,MySQL内建地提供数据复制机制,这使得在使用时,可以基于其复制机制实现高可用架构等高级特性,从而使得MySQL无需借助额外的插件或其他工具就具备适用于生产环境.这是MySQL得 ...

  6. 详解php中函数的引用传递和返回 (附代码)

    本篇文章带大家了解一下php的引用,详细介绍一下函数的引用传递和引用返回.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助.php的引用(就是在变量或者函数.对象等前面加上&符号 ...

  7. Elasticsearch索引模板-转载

    转载地址:https://dongbo0737.github.io/2017/06/13/elasticsearch-template/#similar_posts Elasticsearch索引模板 ...

  8. SCIP:构造过程抽象--面向对象的解释

    心智的活动,除了尽力产生各种简单的认知之外,主要表现为如下三个方面:(1)将若干简单认知组合为一个复合的认识,由此产出各种复杂的认知.(2)将两个认知放在一起对照,不管他们如何简单或者复杂,在这样做时 ...

  9. 基于ZXing.Net生成一维二维码

    新阁教育-喜科堂付工原创 最近很多小伙伴对一维码.二维码比较感兴趣,今天主要给大家分享一个C#生成条形码和二维码的案例. C#作为一个高级语言,特点就是快! 我们使用的是开源库ZXing,ZXing是 ...

  10. 附031.Kubernetes_v1.20.4高可用部署架构二

    kubeadm介绍 kubeadm概述 参考附003.Kubeadm部署Kubernetes. kubeadm功能 参考附003.Kubeadm部署Kubernetes. 本方案描述 本方案采用kub ...