Android开发之Serializable 和 Parcelable的差别(源码分享)
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的差别(源码分享)的更多相关文章
- Android开发之WebView的开发使用(源码分享)
假设我们想提供一个web应用程序(或仅仅是一个网页)作为client应用程序的一部分,我们能够使用WebView.WebView类是Android的视图类的扩展,它同意您显示web页面的一部分活动布局 ...
- Android开发之Theme、Style探索及源码浅析
1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解 ...
- Android开发之发送邮件功能的实现(源码分享)
Android开发中可能会碰到怎样发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法.总共同拥有3种把,我细致阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰.我今天就来分享下我 ...
- Android开发之InstanceState详解
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- Android开发之InstanceState详解(转)---利用其保存Activity状态
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之旅2:HelloWorld项目的目录结构
引言 前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Androi ...
- Android开发之MdiaPlayer详解
Android开发之MdiaPlayer详解 MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在<Android开发之基于Service的音乐播放器>一文中介绍过它的使用. ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
随机推荐
- Android屏幕元素层次结构
转自:http://blog.csdn.net/hpoi/article/details/4629717 Android屏幕元素层次结构 android.app.Activity 对于一个Andr ...
- Cookies/Session机制详解
# 转载自:https://blog.csdn.net/fangaoxin/article/details/6952954/ 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话 ...
- AC日记——可能的路径 51nod 1247
可能的路径 思路: 看到题目想到gcd: 仔细一看是更相减损: 而gcd是更相减损的优化版: 所以,对于每组数据判断gcd是否相等就好: 来,上代码: #include <cstdio> ...
- 中矿新生赛 H 璐神看岛屿【BFS/DFS求联通块/连通块区域在边界则此连通块无效】
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 璐神现在有张n*m大小的地图,地图上标明了陆地(用 ...
- rsync + inotify 同步
1. 配置rysnc server:同步机,同步被同步机更新的文件,很多台vi /etc/rsyncd.conf uid=rootgid=rootuse chroot=nomax connection ...
- Number Triangles
题目描述 Consider the number triangle shown below. Write a program that calculates the highest sum of nu ...
- linux安装mysql数据库(5.7之前的版本)
到mysql官网下载mysql编译好的二进制安装包 解压32位安装包: 进入安装包所在目录,执行命令:tar mysql-5.6.17-linux-glibc2.5-i686.tar.gz 复 ...
- stage 3d学习笔记
1. texture不能实例化,要创建一个texture对象,需要调用Context3D实例的createTexture(width:int, height:int, format:String, o ...
- 访问控制技术- 标准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.设置交换机借 ...
- 几个有用的PHP.ini配置项-路径和目录
几个有用的PHP.ini配置项-路径和目录 路径和目录1.include_path = string作用域:PHP_INI_ALL默认值:NULL此参数指定的路径是include().require( ...