Serializable VS. Parcelable


Serializable


シリアル化(Serializable)とは、内部システムでも利用できるように、オブジェクト(オブジェクト)またはデータ(データ)をバイト形式に変換することである.
シーケンス可能化とは、バイト形式のデータをオブジェクトに変換することです.
Serializableは次のようになります.
@Serializable
data class Data(val a: Int, val b: String)
ご覧のように、実装できません.
タグインタフェース(Mark Interface).
使いやすいが、それに応じてコストが増加する.
シリアル化は反射を使用します.しかし、反射は処理中に多くの追加オブジェクトを生成し、ゴミ収集器のターゲットとなり、パフォーマンスが低下します.

Parcelable


ParceableはAndroid SDKのインタフェースであり、標準Javaではありません.
シリアル化とは異なり、Parcelableでは反射は使用されません.
これは,開発者がシリアル処理方法を明確に作成したためである.
(もちろん、対応するテンプレートコードが追加されます.)
サンプルコードを見てみましょう.
import kotlinx.parcelize.Parcelize

@Parcelize
data class User(val firstName: String, val lastName: String, val age: Int) : Parcelable {
    private companion object : Parceler<User> {
        override fun User.write(parcel: Parcel, flags: Int) {
            // Custom write implementation
        }

        override fun create(parcel: Parcel): User {
            // Custom read implementation
        }
    }
}
ただし、Parcelableは、実装、メンテナンス、メンテナンスのコストを支払う必要があります.

Serializable VS. Parcelable



この絵を見ると、確かにParcelableは速い.
ただし、Parcelableのように直接Serializableにテンプレートコードを記述してカスタムSerializableを作成できると、より高速になります.
Speed: Serializable < Parcelable < Custom Serializable
リファレンス