Sobes.tech
Middle

Тафовут байни Serializable ва Parcelable дар Android чист?

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, передача даних між компонентами