Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidにおけるParcelableとSerializableの違いを徹底解説


本記事では、Android開発においてオブジェクトを受け渡す際に使用される「Serializable」と「Parcelable」の違いについて、実際のコード例を交えながらわかりやすく解説します。

Serializableとは

Serializableは「マーカーインターフェース」とも呼ばれる、実装すべきメソッドを一切持たない空のインターフェースです。Serializableを実装したクラスのオブジェクトはバイトストリームへと変換され、これによってアクティビティ間でデータを受け渡せるようになります。

Serializableの最大のメリットは、実装が非常にシンプルで、データの生成や受け渡しが手軽に行える点です。ただし、後述するParcelableと比較すると処理速度が遅いというデメリットがあります。

以下はSerializableのシンプルな実装例です。

import java.io.Serializable;

class SerializableObject implements Serializable {
    String name;

    public SerializableObject(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Parcelableとは

Parcelableは、Serializableよりも高速に動作するAndroid独自の仕組みです。こちらもオブジェクトをバイトストリームに変換してアクティビティ間でデータをやり取りしますが、実装コードはSerializableに比べてやや複雑になります。

その一方で、Parcelableはデータ受け渡しの際に不要な一時オブジェクトを大量に生成しないため、パフォーマンス面で優れています。Androidアプリの開発では、パフォーマンスが重視される場面でParcelableが推奨されることが多いです。

以下はParcelableのシンプルな実装例です。

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

class ParcelObject implements Parcelable {
    private String name;

    protected ParcelObject(Parcel in) {
        this.name = in.readString();
    }

    public ParcelObject(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static final Creator<ParcelObject> CREATOR = new Creator<ParcelObject>() {
        @Override
        public ParcelObject createFromParcel(Parcel in) {
            return new ParcelObject(in);
        }

        @Override
        public ParcelObject[] newArray(int size) {
            return new ParcelObject[size];
        }
    };

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
    }
}

まとめ

Serializableは実装が非常に簡単ですが処理が遅く、Parcelableは実装やや複雑なものの高速に動作します。手軽さを優先するならSerializable、パフォーマンスを重視するならParcelableを選ぶのが基本の考え方です。特にAndroidアプリ開発では、Intentでのデータ受け渡し頻度が高い場合にはParcelableの採用が推奨されます。

  1. 【Android入門】onCreate()とonStart()の違いをサンプルコードで解説

    onCreate()とonStart()の違いとは? この記事では、Androidアプリ開発におけるonCreate()とonStart()の違いを、実際に動くサンプルコードを使ってわかりやすく解説します。 まず、それぞれのメソッドの役割をおさらいしておきましょう。 onCreate():アクティビティが最初に生成されたときに呼び出される onStart():アクティビティがユーザーの目に見える状態になる直前に呼び出される ポイントは、onCreate()はアクティビティのライフサイクルの中で基本的に一度だけ呼ばれるのに対し、onStart()はホームボタンでバックグラウンドに移動した後に

  2. Androidのfill_parentとwrap_contentの違いとは?具体例でわかりやすく解説

    Androidアプリ開発において、レイアウトのサイズ指定は非常に重要です。本記事では、fill_parent(現在はmatch_parent)とwrap_contentの違いを、実際に動作するサンプルコードを使ってわかりやすく解説します。fill_parentとwrap_contentの基本的な違いfill_parent / match_parent:親ビュー(画面全体など)の幅・高さいっぱいにビューを広げます。「fill_parent」は旧名称で、APIレベル8以降は「match_parent」が推奨されています。wrap_content:テキストなどのコンテンツの大きさに合わせて、ビューが