Sobes.tech
Middle

Ի՞նչ տարբերություն կա Serializable և Parcelable-ի միջև Android-ում։

sobes.tech AI

Պատասխան AI-ից

Հիմնական տարբերությունը կայանում է կատարողականության և իրականացման մեթոդի մեջ:

  • Serializable:

    • Java SE-ի ստանդարտ ինտերֆեյս:
    • Հեշտ է իրականացնել (պարզապես պետք է իրականացնել ինտերֆեյսը):
    • Օգտագործում է Java Reflection API-ն սերիալիզացման համար, ինչը ավելի դանդաղ է և պահանջում է ավելի շատ հիշողություն:
    • Հարմար է փոքր օբյեկտների կամ երբ սերիալիզացիայի կատարողականությունը կարևոր չէ:
  • Parcelable:

    • Android SDK-ի հատուկ ինտերֆեյս:
    • Պահանջում է բացահայտ նկարագրել սերիալիզացիայի և դեսերիալիզացիայի գործընթացը:
    • Ավելին արագ և արդյունավետ է հիշողության օգտագործման առումով, քանի որ չի հենվում Reflection-ի վրա:
    • Լավ ընտրություն է Android-ի կոմպոնենտների միջև օբյեկտների փոխանցման և վիճակի պահպանման համար:

Parcelable իրականացնելու համար անհրաժեշտ է.

  1. Իրականացնել Parcelable ինտերֆեյսը:
  2. Իրականացնել writeToParcel() մեթոդը տվյալների գրառման համար Parcel-ում:
  3. Իրականացնել describeContents() մեթոդը:
  4. Ստեղծել CREATOR ստատիկ օբյեկտը, որը Parcelable.Creator ինտերֆեյսի իրականացման է:
import android.os.Parcel;
import android.os.Parcelable;

public class MyParcelableObject implements Parcelable {
    private int value;
    private String name;

    public MyParcelableObject(int value, String name) {
        this.value = value;
        this.name = name;
    }

    protected MyParcelableObject(Parcel in) {
        value = in.readInt();
        name = in.readString();
    }

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

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

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

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

Համեմատական աղյուսակ:

Գծանշում Serializable Parcelable
Գրադարան java.io android.os
Կատարողականություն Ներքև (Reflection օգտագործում է) Բարձր
Հիշողության արդյունավետություն Ներքև Բարձր
Իրականացում Հեշտ Ավելի բարդ
Օգտագործում Ընդհանուր Java, փոքր տվյալներ Android, տվյալների փոխանցում կոմպոնենտների միջև