android之Parcelable
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的更多相关文章
- Android 使用Parcelable序列化对象
转:http://ipjmc.iteye.com/blog/1314145 Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现 ...
- android 开发Parcelable 怎么传值ArrayList
public class TradeEntity implements Parcelable{ public String id; //有关进度条的参数 ArrayList<TradeState ...
- Android中Parcelable序列化总结
在使用Parcelable对android中数据的序列化操作还是比较有用的,有人做过通过对比Serializable和Parcelable在android中序列化操作对象的速度比对,大概Parcela ...
- Android接口Parcelable的使用
注明:非原创,转载,原链接地址为:http://www.2cto.com/kf/201205/132814.html 和 http://www.blogjava.net/lincode/archive ...
- Android API之android.os.Parcelable
android.os.Parcelable Interface for classes whose instances can be written to and restored from a Pa ...
- Android中Parcelable与Serializable接口用法
转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...
- Android中Parcelable的使用
转载请标明出处 :https://www.cnblogs.com/tangZH/p/10998065.html Parcelable与Serializable Serializable是Java为我 ...
- android基础---->Parcelable的使用
android中Parcelable序列化的使用,简单的记录一下. 目录导航: Serializable在android中的使用 Parcelable在android中的使用 Serializabl ...
- Android中Parcelable的原理和使用方法
Parcelable的简单介绍 介绍Parcelable不得不先提一下Serializable接口,Serializable是Java为我们提供的一个标准化的序列化接口,那什么是序列化呢? 进行And ...
- Android 的Parcelable接口
此文转载自http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html 1. Parcelable接口 Interface ...
随机推荐
- Excel老式技术
Excel老式技术 VBS宏脚本嵌入明文代码
- JS利用cookie记录当前位置实现刷新页面后还可以保持菜单栏的展开或闭合
代码如下,重点是JS部分的代码(部分样式引用的是Bootstrapt中的): <style> .sidebar-menu .special{ font-size: 16px; marg ...
- wrf模拟的domain图绘制
wrf模拟的区域绘制,domain图,利用python的cartopy库绘制模拟区域 参考Liang Chen的draw_wrf_domian.py这个代码, 出处python画wrf模式的模拟区域 ...
- [系统重装日志3]autocad和ps破解安装
cad 以前保存的安装包注册机还让杀毒软件给自动删除了!!!(╯‵□′)╯︵┻━┻!!!又在网上找的注册机!!!(╯‵□′)╯︵┻━┻!!!软件安装包必须保存一份压缩的!!!(╯‵□′)╯︵┻━┻!! ...
- Centos7安装Nacos单机模式以及集群模式(包含nignx安装以及实现集群)的相关配置
Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos支持三种部署模式 单机模式 - 用于测试 ...
- 全网最详细的Linux命令系列-touch命令
linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 命令格式: touch [选项]... 文件... 命令参数: -a 或--tim ...
- Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理
原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...
- Database | 浅谈Query Optimization (2)
为什么选择左深连接树 对于n个表的连接,数量为卡特兰数,近似\(4^n\),因此为了减少枚举空间,早期的优化器仅考虑左深连接树,将数量减少为\(n!\) 但为什么是左深连接树,而不是其他样式呢? 如果 ...
- spring5源码编译过程中必经的坑
spring源码编译流程:Spring5 源码下载 第 一 步 : https://github.com/spring-projects/spring-framework/archive/v5.0.2 ...
- 次小生成树 详解及模板 (仅kruskal)
思路 关于次小生成树,首先求出最小生成树,然后枚举每条不在最小生成树上的边(在原本的节点上添加一个vis属性进行判断即可),并把这条边放到最小生成树上面,然后就一定会形成环,那么我们在这条环路中取出一 ...