zoukankan      html  css  js  c++  java
  • 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) ;
    		}
    	};
    
    }


  • 相关阅读:
    adb pull / push
    June 25,2014---->Binder(IPC),Dalvik ,DEX/ODEX
    adb 读写模式 挂载文件系统
    INSTALL_FAILED_UID_CHANGED
    Logcat不显示Application的解决办法
    Android终端管理器删除文件夹
    ADB
    StringBuffer
    扑克牌排序
    windows内存管理方式以及优缺点
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6768312.html
Copyright © 2011-2022 走看看