android序列化(2)Parcelable与Parcel
1.简介
Parcel : 包裹
Android采用这个它封装消息数据。这个是通过IBinder通信的消息的载体。需要明确的是Parcel用来存放数据的是内存(RAM),而不是永久性介质(Nand等)。
Parcelable: 可放入包裹的协议接口
如果需要封装到包裹中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。
2.示例
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable; import com.e.weixin.R;
import com.e.weixin.contacts.beans.ContactBean; public class MsgBean implements Parcelable{ public static final int MSB_TYPE_TXT = ;
public static final int MSB_TYPE_TP = ;
public static final int MSB_TYPE_XSP = ;
public static final int MSB_TYPE_HB = ;
public static final int MSB_TYPE_ZZ = ;
public static final int MSB_TYPE_SC = ;
public static final int MSB_TYPE_WZ = ;
public static final int MSB_TYPE_SPLT = ;
public static final int MSB_TYPE_MP = ;
public static final int MSB_TYPE_YY = ; ContactBean contact;
public int type ;
public String title;
public String content;
public int icon;
public int movie_res; //==================
public MsgBean(){ } //下面代码都是as自动生成
protected MsgBean(Parcel in) {
//从Parcel中读一个实现了Parcelable接口的自定义的类,需要ClassLoader
contact = in.readParcelable(ContactBean.class.getClassLoader());
type = in.readInt();
title = in.readString();
content = in.readString();
icon = in.readInt();
movie_res = in.readInt();
} public static final Creator<MsgBean> CREATOR = new Creator<MsgBean>() {
@Override
public MsgBean createFromParcel(Parcel in) {
return new MsgBean(in);
} @Override
public MsgBean[] newArray(int size) {
return new MsgBean[size];
}
}; @Override
public int describeContents() {
return ;
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(contact,flags);//写另一个自定义的类,它也实现了Parcelable接口
dest.writeInt(type);
dest.writeString(title);
dest.writeString(content);
dest.writeInt(icon);
dest.writeInt(movie_res);
} public static void test(){ int sz = -,position = -;
//1,准备一个Parcel,其它数据放入其中
Parcel parcel = Parcel.obtain();
sz = parcel.dataSize();
position = parcel.dataPosition(); //2,准备要写入的对象,其中包含另一个实现了Parcelable的对象
ContactBean cb = new ContactBean();
cb.name = "name";
cb.sectionCount = ;
cb.isSection = true;
cb.icon = R.drawable.ebf; MsgBean mb1 = new MsgBean();
mb1.type = ;
mb1.icon = R.drawable.ebf;
mb1.content = "content";
mb1.title = "title";
mb1.contact = cb;
mb1.movie_res = R.raw.movie; //3,写入
mb1.writeToParcel(parcel,);
sz = parcel.dataSize();
position = parcel.dataPosition(); //4,读取
MsgBean mb2 = MsgBean.CREATOR.createFromParcel(parcel); MsgBean mb3 = parcel.readParcelable(MsgBean.class.getClassLoader()); parcel.writeParcelable(mb1, ); MsgBean mb4 = MsgBean.CREATOR.createFromParcel(parcel);
MsgBean mb5 = parcel.readParcelable(MsgBean.class.getClassLoader()); //5,开始序列
Intent intent = new Intent();
intent.putExtra("parcelable",mb1);
intent.putExtra("int",); //6,开始反序列
//通常是在另一个地方得到上面的Intent
MsgBean mb6 = intent.getParcelableExtra("parcelable");
int data = intent.getIntExtra("int",-);
}
}
android序列化(2)Parcelable与Parcel的更多相关文章
- Android序列化:Parcelable/Serializable
1.易用性及速度 1.1 Serializable——简单易用 Serializable的作用是为了保存对象的属性到本地文件.数据库.网络流.rmi以方便数据传输,当然这种传输可以是程序内的也可以是两 ...
- android序列化(1)Parcelable与Serializable
1.Android中实现序列化有两个选择 一是实现Serializable接口(是JavaSE本身就支持的),实现Serializable接口非常简单. 一是实现Parcelable接口(是Andro ...
- Android序列化之Serializable和Parcelable
PS:还有几天就开学了.先来一发. 学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3.Parcelable与Serializable的性能比较 4.Android中如何使用Par ...
- Android中使用Parcelable
今天 在两个Activity之间传集合类型数据,看了一下,要用Parcelable 所以就看一下东西: 下面一段话是复制网友的. Android序列化对象主要有两种方法,实现Serializable接 ...
- 浅谈Android序列化
序列化原因 序列化的原因基本可以归纳为以下三种情况: 永久性保存对象,保存对象的字节序列到本地文件中: 对象在网络中传递: 对象在IPC间传递. --- --- 序列化方法 在Android系统中关于 ...
- Android开发之漫漫长途 X——Android序列化
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- Android 序列化比对
本文转自:https://www.zybuluo.com/linux1s1s/note/91046 注:部分内容有更改 在Android中使用序列化,无非两种途经: Parcelable 和 Seri ...
- 安卓实现序列化之Parcelable接口
安卓实现序列化之Parcelable接口 1.实现序列化的方法: Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持的) .一是实现Parcelabl ...
- Android开发当中Parcelable接口的使用
本文转载于:http://www.2cto.com/kf/201205/132814.html 本文稍微做了些修改 android提供了一种新的类型:Parcel.本类被用作封装数据的容器,封装后的数 ...
随机推荐
- 使用 docker 安装 OpenVAS 漏洞扫描软件
https://blog.csdn.net/freewebsys/article/details/78804624
- 网易2018校招 合唱 DP
时间限制:2秒 空间限制:131072K 小Q和牛博士合唱一首歌曲,这首歌曲由n个音调组成,每个音调由一个正整数表示.对于每个音调要么由小Q演唱要么由牛博士演唱,对于一系列音调演唱的难度等于所有相 ...
- JSP标准标签库(JSTL)
JSTL:JSP Standard Tag Library:JSP标准标签库 以下内容引用自http://wiki.jikexueyuan.com/project/jsp/standard-tag-l ...
- Android GIS开发系列-- 入门季(13)Gdal简单写个shp文件
Gdal是用来读写栅格与矢量数据的,在Gdal官网,可以下载相关的资源进行平台的编译.其实Arcgis底层也是用Gdal来读取shp文件的,那在Android中可以直接读写shp文件吗,是可以的.这里 ...
- 【c++】【转】C++ sizeof 使用规则及陷阱分析
http://www.cnblogs.com/chio/archive/2007/06/11/778934.html sizeof不是函数,更像一个特殊的宏,它是在编译阶段求值得.sizeof作用范围 ...
- 《软件project》——编码
编码的目的是使用选定的程序设计语言,把模块的过程描写叙述翻译为用该语言书写的源程序. 源程序应该正确可靠.简明清晰,并且具有较高的效率.在编程的步骤中,要把软件具体设计的表达式翻译成为编程语言的 ...
- Photoshop制作的ico图标方法
photoshop是打不开ico的.只是能够通过安装插件实现. 插件点击这里能够下载. 用法,解压后的插件文件 粘贴到: (英文版路径) /program files/adobe/photoshop ...
- linux 下查看一个进程执行路径
在linux下查看进程大家都会想到用 ps -ef|grep XXX 但是看到的不是全路径.怎么看全路径呢? 每一个进程启动之后在 /proc以下有一个于pid相应的路径 比如:ps -ef|grep ...
- Python正則表達式小结(1)
学习一段python正則表達式了, 对match.search.findall.finditer等函数作一小结 以下以一段网页为例,用python正則表達式作一个范例: strHtml = '''& ...
- Cholesky分解 平方根法
一种矩阵运算方法,又叫Cholesky分解.所谓平方根法,就是利用对称正定矩阵的三角分解得到的求解对称正定方程组的一种有效方法.它是把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解.它要 ...