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.本类被用作封装数据的容器,封装后的数 ...
随机推荐
- JQuery判断radio是否选中并获取选中值的示例代码
这篇文章主要介绍了JQuery判断radio是否选中并获取选中值的方法,代码很简单,但很实用,需要的朋友可以参考下 其他对radio操作功能,以后在添加.直接上代码,别忘记引用JQuery包 ? 1 ...
- mysql性能调优——锁优化
影响mysql server性能的相关因素 需求和架构及业务实现优化:55% Query语句优化:30% 数据库自身优化:15% 很多时候大家看到数据库应用系统中性能瓶颈出现在数据库方面,就希望通过数 ...
- centos7容量扩充
新买的2T 绿盘到货了~~好开心的说~但毕竟是第一次安装,事先还是在网上搜索了很多资料才敢动手,下面就开始啦~ 环境:Centos7.dell服务器.2T容量绿盘 1.硬盘连接好之后,开机先使用fdi ...
- 获取路由事件的源Source和OriginalSource
路由事件的消息包括在RoutedEventArgs实例中,该实例有两个属性Source和OriginalSource,都是表示路由事件传递的起点.即事件消息的源头.仅仅只是Source表示的是Logi ...
- Jenkins安装与使用
一.Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作 二.下载与安装 下载地址 ...
- Android如何进行单元测试
Menifest.xml中加入: <application>中加入: <uses-library android:name="android.test.runner&quo ...
- current_session_context_class
<property name="current_session_context_class">thread</property>这个属性的作用:这样配置是本 ...
- YTU 2639: 改错题:类中私有成员的访问
2639: 改错题:类中私有成员的访问 时间限制: 1 Sec 内存限制: 128 MB 提交: 431 解决: 297 题目描述 /* 改错题: 设计一个日期类和时间类,并编写全局函数displ ...
- java多线程面试题(来自转载)
在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问 ...
- mybatis多表关联配置
首先需要的jar包 mybatis-3.4.1 配置文件(mybatis.cfg.xml) <?xml version="1.0" encoding="UTF-8& ...