android 中自己定义的对象序列化的问题有两个选择一个是Parcelable,另外一个是Serializable。

一 序列化原因:

1.永久性保存对象。保存对象的字节序列到本地文件里。

2.通过序列化对象在网络中传递对象。

3.通过序列化在进程间传递对象。

二 至于选取哪种可參考以下的原则:

1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。

2.Serializable在序列化的时候会产生大量的暂时变量。从而引起频繁的GC。

3.Parcelable不能使用在要将数据存储在磁盘上的情况。由于Parcelable不能非常好的保证数据的持续性在外界有变化的情况下。虽然Serializable效率低点, 也不提倡用,但在这样的情况下,还是建议各位能够用Serializable 。

Serializable 的实现,仅仅须要继承  implements Serializable 就可以。

这仅仅是给对象打了一个标记,系统会自己主动将其序列化。

Parcelable的实现须要下面步骤

(1)describeContents方法。内容接口描写叙述,默认返回0就能够;

(2)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.即打包须要传递的数据到Parcel容器保存。以便从parcel容器获取数据。该方法声明例如以下:

writeToParcel (Parcel dest, int flags)

(3)创建对应函数的构造方法

(4)静态的Parcelable.Creator接口,本接口有两个方法:

createFromParcel(Parcel in)  从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。

newArray(int size) return new T[size])

源码例如以下

package com.example.service;

import android.os.Parcel;
import android.os.Parcelable; public class Person implements Parcelable{
private int age;
private String name; public Person(Parcel in) {
age=in.readInt();
name=in.readString();
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeInt(age);
dest.writeString(name);
}
public static final Parcelable.Creator<Person> CREATOR=new Creator<Person>() { @Override
public Person[] newArray(int size) {
// TODO Auto-generated method stub
return new Person[size];
} @Override
public Person createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new Person(source) ;
}
}; }

Android开发之Serializable 和 Parcelable的差别(源码分享)的更多相关文章

  1. Android开发之WebView的开发使用(源码分享)

    假设我们想提供一个web应用程序(或仅仅是一个网页)作为client应用程序的一部分,我们能够使用WebView.WebView类是Android的视图类的扩展,它同意您显示web页面的一部分活动布局 ...

  2. Android开发之Theme、Style探索及源码浅析

    1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解 ...

  3. Android开发之发送邮件功能的实现(源码分享)

    Android开发中可能会碰到怎样发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法.总共同拥有3种把,我细致阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰.我今天就来分享下我 ...

  4. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  5. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  6. Android开发之InstanceState详解(转)---利用其保存Activity状态

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  7. Android开发之旅2:HelloWorld项目的目录结构

    引言 前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Androi ...

  8. Android开发之MdiaPlayer详解

    Android开发之MdiaPlayer详解 MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在<Android开发之基于Service的音乐播放器>一文中介绍过它的使用. ...

  9. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

随机推荐

  1. Android屏幕元素层次结构

    转自:http://blog.csdn.net/hpoi/article/details/4629717   Android屏幕元素层次结构 android.app.Activity 对于一个Andr ...

  2. Cookies/Session机制详解

    # 转载自:https://blog.csdn.net/fangaoxin/article/details/6952954/ 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话 ...

  3. AC日记——可能的路径 51nod 1247

    可能的路径 思路: 看到题目想到gcd: 仔细一看是更相减损: 而gcd是更相减损的优化版: 所以,对于每组数据判断gcd是否相等就好: 来,上代码: #include <cstdio> ...

  4. 中矿新生赛 H 璐神看岛屿【BFS/DFS求联通块/连通块区域在边界则此连通块无效】

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 璐神现在有张n*m大小的地图,地图上标明了陆地(用 ...

  5. rsync + inotify 同步

    1. 配置rysnc server:同步机,同步被同步机更新的文件,很多台vi /etc/rsyncd.conf uid=rootgid=rootuse chroot=nomax connection ...

  6. Number Triangles

    题目描述 Consider the number triangle shown below. Write a program that calculates the highest sum of nu ...

  7. linux安装mysql数据库(5.7之前的版本)

    到mysql官网下载mysql编译好的二进制安装包   解压32位安装包: 进入安装包所在目录,执行命令:tar mysql-5.6.17-linux-glibc2.5-i686.tar.gz   复 ...

  8. stage 3d学习笔记

    1. texture不能实例化,要创建一个texture对象,需要调用Context3D实例的createTexture(width:int, height:int, format:String, o ...

  9. 访问控制技术- 标准IP访问列表

    1.设置pc  IP 网关 192.168.1.1 192.168.1.254 192.168.1.2 192.168.1.254 192.168.3.1 192.168.3.254 2.设置交换机借 ...

  10. 几个有用的PHP.ini配置项-路径和目录

    几个有用的PHP.ini配置项-路径和目录 路径和目录1.include_path = string作用域:PHP_INI_ALL默认值:NULL此参数指定的路径是include().require( ...