它们的使用场景都是用在Activity之间传递数据,此数据可以是复杂的对象。
Parceble比Serializable更高级,更具轻量级,首先Parceble进行序列化和反序列化是在内存中进行的,比Serializable在磁盘或是SD上要效率的多;Serializable在序列化的时候会产生大量的临时对象,从而会引起频繁的GC,效率较低;Parceble代码实现起来比Serializable麻烦些;在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable类。
实现原理之核心代码

 //Serializeable传递对象的方法
public void SerializeMethod(){
Person mPerson = new Person();
mPerson.setName("wangyang");
mPerson.setAge(23);
Intent mIntent = new Intent(this,IntentDemo1.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable(SER_KEY,mPerson);
mIntent.putExtras(mBundle);

startActivity(mIntent);
}
//Pacelable传递对象方法
public void PacelableMethod(){
Book mBook = new Book();
mBook.setBookName("Haier");
mBook.setAuthor("wy");
mBook.setPublishTime(20161112);
Intent mIntent = new Intent(this,IntentDemo2.class);
Bundle mBundle = new Bundle();
mBundle.putParcelable(PAR_KEY, mBook);
mIntent.putExtras(mBundle);

startActivity(mIntent);
}

接收之核心代码

 Person mPerson = (Person)getIntent().getSerializableExtra(new IntentDemo().SER_KEY);
Book mBook = (Book)getIntent().getParcelableExtra(new IntentDemo().PAR_KEY);

Serializable使用举例:
1新建一个IntentDemo

package com.mindasset.intentdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class IntentDemo extends Activity implements View.OnClickListener {

private Button sButton,pButton;
public final static String SER_KEY = "cn.caiwb.intent.ser";
public final static String PAR_KEY = "cn.caiwb.intent.par";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViews();

}

public void setupViews(){
sButton = (Button)findViewById(R.id.button1);
pButton = (Button)findViewById(R.id.button2);
sButton.setOnClickListener(this);
pButton.setOnClickListener(this);
}
//Serializeable传递对象的方法
public void SerializeMethod(){
Person mPerson = new Person();
mPerson.setName("wangyang");
mPerson.setAge(23);
Intent mIntent = new Intent(this,IntentDemo1.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable(SER_KEY,mPerson);
mIntent.putExtras(mBundle);

startActivity(mIntent);
}
//Pacelable传递对象方法
public void PacelableMethod(){
Book mBook = new Book();
mBook.setBookName("Haier");
mBook.setAuthor("wy");
mBook.setPublishTime(20161112);
Intent mIntent = new Intent(this,IntentDemo2.class);
Bundle mBundle = new Bundle();
mBundle.putParcelable(PAR_KEY, mBook);
mIntent.putExtras(mBundle);

startActivity(mIntent);
}
//铵钮点击事件响应
public void onClick(View v) {
if(v == sButton){
SerializeMethod();
}else{
PacelableMethod();
}
}
}

布局文件


android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Welcome to wangyang's blog."
/>
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Serializable"
/>
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Parcelable"
/>

2Person类实现Serializable接口

package com.mindasset.intentdemo;

import java.io.Serializable;

/**
* Created by Administrator on 2016/11/12.
*/

public class Person implements Serializable {
//person这个类实现了Serializable接口,可以把Person整个对象进行Activity之间的传递
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

3用来接收实现Serializable接口的对象

package com.mindasset.intentdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class IntentDemo1 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//代码中实现布局展示
TextView mTextView = new TextView(this);
Person mPerson = (Person)getIntent().getSerializableExtra(new IntentDemo().SER_KEY);
mTextView.setText("You name is: " + mPerson.getName() + "/n"+
"You age is: " + mPerson.getAge());

setContentView(mTextView);
}
}

4新建一个实现Parceble接口的类对象Book

package com.mindasset.intentdemo;

import android.os.Parcel;
import android.os.Parcelable;

/**
* Created by Administrator on 2016/11/12.
*/

public class Book implements Parcelable {
//Book类实现Parceble接口,Intent可以在内存中高效率的传递这个Book对象
private String bookName;
private String author;
private int publishTime;

public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPublishTime() {
return publishTime;
}
public void setPublishTime(int publishTime) {
this.publishTime = publishTime;
}

public static final Parcelable.Creator CREATOR = new Creator() {
public Book createFromParcel(Parcel source) {
Book mBook = new Book();
mBook.bookName = source.readString();
mBook.author = source.readString();
mBook.publishTime = source.readInt();
return mBook;
}
public Book[] newArray(int size) {
return new Book[size];
}
};

public int describeContents() {
return 0;
}
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(bookName);
parcel.writeString(author);
parcel.writeInt(publishTime);
}
//详解:
/*
public class User implements Parcelable {
public String name;
public int age;

// 必须要创建一个名叫CREATOR的常量。
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
@Override
public User createFromParcel(Parcel source) {
return new User(source);
}
//重写createFromParcel方法,创建并返回一个获得了数据的user对象
@Override
public User[] newArray(int size) {
return new User[size];
}
};

@Override
public String toString() {
return name + ":" + age;
}

// 无参数构造器方法,供外界创建类的实例时调用
public User() {
}

// 带参构造器方法私用化,本构造器仅供类的方法createFromParcel调用
private User(Parcel source) {
name = source.readString();
age = source.readInt();
}

@Override
public int describeContents() {
return 0;
}

// 将对象中的属性保存至目标对象dest中
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
*/
}

5用来接收实现Parcveble接口的对象

package com.mindasset.intentdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class IntentDemo2 extends Activity {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView mTextView = new TextView(this);
Book mBook = (Book)getIntent().getParcelableExtra(new IntentDemo().PAR_KEY);
mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+
"Author is: " + mBook.getAuthor() + "/n" +
"PublishTime is: " + mBook.getPublishTime());
setContentView(mTextView);
}
}