Basically, a parcelable or serializable class are "transformed" in generic binaries with your package reference. This able you to transfer and persist data over databases, Intents
and more.
The idea behind this is keep the state of some Activity
or Fragment
for example as a state machine.
By default, the system uses the Bundle instance state to save
information about each View object in your activity layout (such as
the text value entered into an EditText object). So, if your activity
instance is destroyed and recreated, the state of the layout is
restored to its previous state with no code required by you. However,
your activity might have more state information that you'd like to
restore, such as member variables that track the user's progress in
the activity.
Read more at Recreating an Activity.
Serializable
By default, the serialization mechanism encodes an object's class
name, the names of its non-transient fields (including non-public
fields), and the values of all of those fields. The output is an
opaque sequence of bytes. Those bytes can be decoded into a new,
equivalent instance as long as the decoder has compatible versions of
the originating classes. Changing the class name, field names or field
types breaks serialization compatibility and complicates
interoperability between old and new versions of the serializable
class. Adding or removing fields also complicates serialization
between versions of a class because it requires your code to cope with
missing fields.
Read more at: http://developer.android.com/reference/java/io/Serializable.html
Parcel
The bulk of the Parcel API revolves around reading and writing data of
various types.
Read more at: http://developer.android.com/reference/android/os/Parcel.html and http://developer.android.com/reference/android/os/Parcelable.html
Bundle documentation: http://developer.android.com/reference/android/os/Bundle.html
More links and posts
Hope helped.