According to google engineers, this code will run significantly faster. One of the reasons for this is that we are being explicit about the serialization process instead of using reflection to infer it. It also stands to reason that the code has been heavily optimized for this purpose.
However, it is obvious here that implementing Parcelable is not free. There is a significant amount of boilerplate code and it makes the classes harder to read and maintain.
package com.cocoalibrary.objectPass;
import android.os.Parcel;
import android.os.Parcelable;
public class Library implements Parcelable {
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<Book> CREATOR = new Creator<Book>() {
public Book createFromParcel(Parcel source) {
Library mBook = new Library();
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);
}
}
package com.cocoalibrary.objectPass;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ParcelableDemo extends Activity implements OnClickListener {
private Button button;
public final static String PAR_KEY = "com.cocoalibrary.parcelableKey";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
public void setupViews(){
button = (Button)findViewById(R.id.button);
button.setOnClickListener(this);
}
public void PacelableMethod(){
Library mBook = new Library();
mBook.setBookName("Pacelable Tutorial");
mBook.setAuthor("Raja");
mBook.setPublishTime(2014);
Intent mIntent = new Intent(this, PacelableDemo.class);
Bundle mBundle = new Bundle();
mBundle.putParcelable(PAR_KEY, mBook);
mIntent.putExtras(mBundle);
startActivity(mIntent);
}
public void onClick(View v) {
PacelableMethod();
}
}
package com.cocoaLibrary.objectPass;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class DetailDataView extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView mTextView = new TextView(this);
Book mBook = (Book)getIntent().getParcelableExtra(PacelableDemo.PAR_KEY);
mTextView.setText("Library name is: " + mBook.getBookName()+"/n"+
"Author is: " + mBook.getAuthor() + "/n" +
"PublishTime is: " + mBook.getPublishTime());
setContentView(mTextView);
}
}
If you want to be a good citizen, take the extra time to implement Parcelable since it will perform 10 times faster and use less resources.
However, in most cases, the slowness of Serializable won’t be noticeable. Feel free to use it but remember that serialization is an expensive operation so keep it to a minimum.
If you are trying to pass a list with thousands of serialized objects, it is possible that the whole process will take more than a second. It can make transitions or rotation from portrait to lanscape feel very sluggish.