Purpose of describeContents() of Parcelable interface

Android

Android Problem Overview


> Possible Duplicate:
> Parcelable where/when is describeContents() used?

What is the purpose of implementing describeContents() function of Parcelable interface? Most of the framework code returns 0 as implementation. Documentation says "a bitmask indicating the set of special object types marshalled by the Parcelable." Could someone explain about this function.(probably with an example)

Android Solutions


Solution 1 - Android

It may happen that your class will have child classes, so each of child in this case can return in describeContent() different values, so you would know which particular object type to create from Parcel. For instance like here - example of implementation of Parcelable methods in parent class (MyParent):

//************************************************
// Parcelable methods
//************************************************
//need to be overwritten in child classes 
//MyChild_1 - return 1 and MyChild_2 - return 2
public int describeContents() {return 0;}

public void writeToParcel(Parcel out, int flags)
{
    out.writeInt(this.describeContents());
    out.writeSerializable(this);
}

public Parcelable.Creator<MyParent> CREATOR
        = new Parcelable.Creator<MyParent>()
{
    public MyParent createFromParcel(Parcel in)
    {
        int description=in.readInt();
        Serializable s=in.readSerializable();
        switch(description)
        {
            case 1:
                return (MyChild_1 )s;
            case 2:
                return (MyChild_2 )s;
            default:
                return (MyParent )s;
        }
    }

    public MyParent[] newArray(int size)
    {
        return new MyParent[size];
    }
};

In this case one doesn't need to implement all Parcelable methods in child classes - except describeContent()

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSureshView Question on Stackoverflow
Solution 1 - AndroidBarmaleyView Answer on Stackoverflow