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.本类被用作封装数据的容器,封装后的数 ...
随机推荐
- gulp基本语法
pipe:用管道输送 1.gulp.src(glops[, options]) 输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件. 将返回一个 ...
- 动态替换logback FileAppender/RollingFileAppender 配置- Programmatically configure logback FileAppender/RollingBackAppender
一.本文实际解决的问题 如何在代码中修改logback的RollingFileAppender配置(本文代码实例为修改日志文件路径) 二.针对的场景: 本文解决的问题属于一个大需求的一部分,需求为:需 ...
- Tomcat服务器调优
一,目标:优化tomcat来提高访问的并发能力. 服务器提供的内存,cpu,以及硬盘的性能对数据的处理起决定性作用. tomcat的3种运行模式 tomcat的运行模式有3种: 1. bio默认的模式 ...
- Servlet基础教程:tutorialspoint-servlet
来自turorialspoint的Servlet基础教程(英文),官网:https://www.tutorialspoint.com/servlets/index.htm 这个教程在国内已经被翻译成中 ...
- Android GIS开发系列-- 入门季(9) 定位当前的位置
利用MapView定位当前的位置 这里要用到Arcgis中的LocationDisplayManager这个类,由于比较简单.直接上代码: LocationDisplayManager locatio ...
- 第三课 MongoDB 数据更新
1.课程大纲 本课程主要解说 MongoDB 数据更新的相关内容.包含文档插入 insert 函数.文档删除 remove函数以及文档更新update函数的基本使用.除此之外.还会介绍 MongoDB ...
- JAVA —— String is immutable. What exactly is the meaning? [duplicate]
question: I wrote the following code on immutable Strings. public class ImmutableStrings { public st ...
- java STW stop the world 哈哈就是卡住了
java STW stop the world 哈哈就是卡住了 学习了:http://www.jb51.net/article/125400.htm
- UG如何把语言改成中文,UG如何把界面语言改成中文
1 高级系统设置,高级,新建一个用户变量(变量名为lang,变量值为chs) 2 高级系统设置,高级,环境变量,系统变量中,查看变量名为UGII_LANG的值是否为simpl_chinese,如果 ...
- 使用bbed改动数据
bbed是一个强大的工具,同意我们绕过oracle直接从数据文件里改动相应的内容 ZBDBA@orcl11g>select * from emp; EMPNO ENAME JOB MGR HIR ...