Sobes.tech
Middle

Android-ში Serializable და Parcelable-ს შორის რა განსხვავებაა?

sobes.tech AI

პასუხი AI-სგან

მთავარი განსხვავება შესრულებასა და განხორციელების მეთოდშია.

  • Serializable:

    • Java SE-ის სტანდარტული ინტერფეისი.
    • მარტივია განხორციელება (საკმარისია ინტერფეისის იმპლემენტაცია).
    • იყენებს Java Reflection API-ს სერილიზაციისთვის, რაც ნელი და მოითხოვს მეტ მეხსიერებას.
    • შესაფერისია მცირე ობიექტებისთვის ან როდესაც სერილიზაციის შესრულება კრიტიკული არ არის.
  • Parcelable:

    • Android SDK-ის სპეციფიკური ინტერფეისი.
    • მოითხოვს პროცესის სერილიზაციის/დისერილიზაციის მკაფიო აღწერას.
    • მნიშვნელოვნად სწრაფი და ეფექტური მეხსიერების გამოყენების თვალსაზრისით, რადგან არ იყენებს Reflection-ს.
    • საუკეთესო არჩევანია ობიექტების გადაცემისთვის Android-ის კომპონენტებს შორის (Activity, Service, BroadcastReceiver) და მდგომარეობის შენახვისთვის.

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, მონაცემთა გადაცემა კომპონენტებს შორის