Android中Parcelable接口的使用
在做开发的过程中,序列化是非常常见的。比如要将对象保存本地磁盘或者在网络上传输等。实现序列化有两种方式,一种是实现Serializable接口,第二种是实现Parcelable。
Serializable与Parcelable的区别
1、Serializable是JDK提供的接口,而Parcelable是Android SDK提供的。
2、Serializable序列化是基于磁盘的,而Parcelable是基于内存的。在内存中读写肯定效率要高于磁盘,所以Android中跨进程传递对象都是使用Parcelable。
Parcelable接口定义
- public interface Parcelable {
- //内容描述接口,基本不用管
- public int describeContents();
- //写入接口函数,打包
- public void writeToParcel(Parcel dest, int flags);
- //读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入。
- //为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例。
- public interface Creator<T> {
- public T createFromParcel(Parcel source);
- public T[] newArray(int size);
- }
从parcelable接口定义中,我们可以看到,实现parcelable接口,需要我们实现下面几个方法:
1.describeContents方法。内容接口描述,默认返回0就可以;
2.writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.即打包需要传递的数据到Parcel容器保存,以便从parcel容器获取数据,该方法声明如下:
writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc
3.静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。方法是供外部类反序列化本类数组使用。
Parcelable的使用
- public class AppContent implements Serializable, Parcelable {
- //应用名字
- private String name;
- //应用下载链接
- private String url;
- private int downloadPercent = 0;
- private Status status = Status.PENDING;
- public AppContent(String name, String url) {
- this.name = name;
- this.url = url;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getUrl() {
- return url;
- }
- public void setUrl(String url) {
- this.url = url;
- }
- public int getDownloadPercent() {
- return downloadPercent;
- }
- public void setDownloadPercent(int downloadPercent) {
- this.downloadPercent = downloadPercent;
- }
- public Status getStatus() {
- return status;
- }
- public void setStatus(Status status) {
- this.status = status;
- }
- @Override
- public String toString() {
- return name;
- }
- @Override
- public int describeContents() {
- return 0;
- }
- //实现Parcel接口必须覆盖实现的方法
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- /*将AppContent的成员写入Parcel,
- * 注:Parcel中的数据是按顺序写入和读取的,即先被写入的就会先被读取出来
- */
- dest.writeString(name);
- dest.writeString(url);
- dest.writeInt(downloadPercent);
- dest.writeValue(status);
- }
- //该静态域是必须要有的,而且名字必须是CREATOR,否则会出错
- public static final Parcelable.Creator<AppContent> CREATOR =
- new Parcelable.Creator<AppContent>() {
- @Override
- public AppContent createFromParcel(Parcel source) {
- //从Parcel读取通过writeToParcel方法写入的AppContent的相关成员信息
- String name = source.readString();
- String url = source.readString();
- int downloadPercent = source.readInt();
- Status status = (Status)source.readValue(new ClassLoader(){});
- AppContent appContent = new AppContent(name, url);
- appContent.setDownloadPercent(downloadPercent);
- appContent.setStatus(status);
- //更加读取到的信息,创建返回Person对象
- return appContent;
- }
- @Override
- public AppContent[] newArray(int size)
- {
- // TODO Auto-generated method stub
- //返回AppContent对象数组
- return new AppContent[size];
- }
- };
- }
通过Intent进行传递:
- Intent intent = new Intent(Constants.DOWNLOAD_MSG);
- Bundle bundle = new Bundle();
- bundle.putParcelable("appContent", appContent);
- intent.putExtras(bundle);
参考:http://www.tuicool.com/articles/MJzAZn,感谢作者。
Android中Parcelable接口的使用的更多相关文章
- Android中Parcelable接口用法
from: http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html Interface for classes wh ...
- Android中Parcelable接口
1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...
- (转)Android中Parcelable接口用法
1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...
- Android中Parcelable与Serializable接口用法
转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...
- Android中的接口回调技术
Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...
- Android中回调接口的使用
MainActivity如下: package cn.testcallback; import android.os.Bundle; import android.app.Activity; /** ...
- Android中Parcelable和Serializable接口用法
1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...
- Android开发中Parcelable接口的使用方法
在网上看到很多Android初入门的童鞋都在问Parcelable接口的使用方法,小编参考了相关Android教程,看到里面介绍的序列化方法主要有两种分别是实现Serializable接口和实现Par ...
- Android 的Parcelable接口
此文转载自http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html 1. Parcelable接口 Interface ...
随机推荐
- Cacti的基本使用
对于Cacti是通过snmpget来获取数据,使用 RRDtool绘画图形,用snmp服务获取数据,然后用rrdtool储存和更新数据,那么就可以简单理解为Cacti就是RRDTool的一个web图形 ...
- DL4J (DeepLearning for java)
http://deeplearning4j.org/lstm.html A Beginner’s Guide to Recurrent Networks and LSTMs Contents Feed ...
- nodeJS分层
一.nodeJS分层 分为三层: - 表现层:接受用户数据,并封装 - 服务层:与公司业务有关的东西,处理判断呀什么的 - 持久层:与数据库有关的 表现层:page与表现层的数据传递,route ...
- Java 第十章 类和对象
类和对象 类与对象的关系是什么? 答 :类是具有相同属性和方法的一组对象的集合. 类是抽象的,对象是具体的:类是对象的模版,对象是类的实例. 定义一个类的语法是什么? public class 类名{ ...
- java中this用法总结
1,当局部变量和成员变量重名的时候,在方法中使用this表示成员变量以示区分. class Demo{ String str = "这是成员变量"; void fun(String ...
- 不用ide编译java程序时调用jar包
调用特定目录下的jar包 javac -cp d:\javatest\dom4j.jar Dom4jDemo.java //这部分必须注意,d:\javatest 是Dom4jDemo.class所在 ...
- [SmartFoxServer入门]服务器安装
安装SFS2X: SFS2X平台安装操作和步骤都很简单.我们建议先查看对系统的要求,然后根据你选择的操作系统按照指定的安装向导进行安装. 系统要求: SFS2X是一款支持所有主流操作系统,运行在JVM ...
- as的一些常见问题
assets文件的存放目录在”src/main/”目录下,和java.res文件夹平级: aidl文件需要单独在”src/main/”目录下新建一个文件夹,然后创建对应的包名,将aidl文件放在包名对 ...
- 用c#开发微信 (6) 微渠道 - 推广渠道管理系统 1 基础架构搭建
我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 本系统使用 ...
- 让Sqlite脱离VC++ Runtime独立运行
前段时间在开发OrayTalk(傲瑞通)的聊天记录模块时用到了Sqlite,这是我第一次接触和使用Sqlite,总体感觉还是非常不错的.这里把我使用Sqlite的经验跟大家分享一下. 一.关于Sqli ...