在网上看到很多Android初入门的童鞋都在问Parcelable接口的使用方法,小编参考了相关Android教程,看到里面介绍的序列化方法主要有两种分别是实现Serializable接口和实现Parcelable接口,通过具体试验,和大家分享一下Parcelable接口的用法,希望对大家有帮助。

Serializable接口与Parcelable接口的区别

在将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进行传递:

1    Intent intent = new Intent(Constants.DOWNLOAD_MSG);

2    Bundle bundle = new Bundle();

3    bundle.putParcelable("appContent", appContent);

4    intent.putExtras(bundle);

以上就是Android开发中,序列化常用的Parcelable接口方法,遇到有类似问题的亲可尝试使用上述的方法进行解决。

Android开发中Parcelable接口的使用方法的更多相关文章

  1. Android开发当中Parcelable接口的使用

    本文转载于:http://www.2cto.com/kf/201205/132814.html 本文稍微做了些修改 android提供了一种新的类型:Parcel.本类被用作封装数据的容器,封装后的数 ...

  2. 【转】Android开发中让你省时省力的方法、类、接口

    转载 http://www.toutiao.com/i6362292864885457410/?tt_from=mobile_qq&utm_campaign=client_share& ...

  3. Android开发中使用startActivityForResult()方法从Activity A跳转Activity B出现B退出时A也同时退出的解决办法

    最近一个 App 中用到了 startActivityForResult() 方法,使用的时候却出现了一些问题,比如我在 Activity A 中调用该方法向 Activity B 中跳转,如果 B  ...

  4. Android开发中,那些让您觉得相见恨晚的方法、类或接口

    Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...

  5. 在Android开发中,定时器一般有以下3种实现方法

    在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用H ...

  6. 在Android开发中,定时执行任务的3种实现方法

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...

  7. 在android开发中使用multdex的方法-IT蓝豹为你整理

    Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...

  8. android开发中关于继承activity类中方法的调用

    android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import and ...

  9. 在Android开发中替换资源图片不起作用的解决方法

    现象 在android开发中,经常会需要替换res\drawable中的图片,打开res\layout下的文件预览布局页面发现图片已经被替换,但在模拟器或者真实机器上运行时发现该图片并没有被替换,还是 ...

随机推荐

  1. [JZOJ] 5905. 黑暗之魂(darksoul)

    基环树直径裸题 分别在子树做DP,环上做DP,环上可以用单调队列优化到\(O(n)\) 写起来很麻烦 #include<algorithm> #include<iostream> ...

  2. Smartforms 设置纸张打印格式

    在sap做一个打印报表,要先设置一个纸张打印格式,下面以工厂中常用来打印的针孔纸为例,在sap设置该纸张的打印格式,以用于报表: 1.运行事务代码SPAD:选择工具栏上的[完全管理]按钮——>选 ...

  3. Pagehelper介绍

    本文引自:https://my.oschina.net/zudajun/blog/745232 摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybat ...

  4. 图解HTTP总结(1)——了解Web及网络基础

    Web页面不能凭空显示出来.根据Web浏览器地址栏指定的URL,Web浏览器从Web服务器端获取文件资源等信息,从而显示出Web页面. Web使用一种名为HTTP(HyperText  Transfe ...

  5. selenium库:自动化测试工具

    爬虫中主要用来解决Javascript渲染问题 1.声明浏览器对象: from selenium import webdriver browser = webdriver.浏览器名() 2.访问页面: ...

  6. mysql8.0 忘记root密码

    先打开一个cmd:net stop mysql //关闭mysql服务mysqld --shared-memory --skip-grant-tables//跳过登录密码在不关闭第一个CMD的情况下打 ...

  7. C语言实例解析精粹学习笔记——26

    实例26:阿拉伯数字转换为罗马数字,将一个整数n(1~9999)转换为罗马数字,其中数字和罗马数字的对应关系如下: 原书中的开发环境很老,我也没有花心思去研究.自己在codeblocks中进行开发的, ...

  8. 14、函数之匿名函数(lambda)

    关键字lambda可以创建匿名函数,语法是:lambda 参数s :表达式.匿名函数与普通函数只有以下几点不同:①没有函数名:②只能有一个表达式:③一定会有返回值,返回值就是该表达式的结果. 另外,匿 ...

  9. 笔记-select,poll,epoll

    笔记-select,poll,epoll 1.      I/O多路复用 I/O多路复用是指:通过一种机制或一个进程,可以监视多个文件描述符,一旦描述符就绪(写或读),能够通知程序进行相应的读写操作. ...

  10. spark基于win上面的操作

    自己前面的小练习一直都是在linux上面写的,可是最近由于要把他迁移到win上面,我在自己的csdn博客有对如何在win上面搭建spark环境做出说明,好了,我们还是先看看 今天的内容吧 1.假如你有 ...