Sobes.tech
Junior

Kas yra serializuojami ir parceliuojami objektai?

sobes.tech AI

Atsakymas iš AI

Serijalizuojami objektai gali būti paversti į baitų srautą saugojimui ar perdavimui naudojant standartinį Java mechanizmą java.io.Serializable.

Parceliuojami objektai taip pat gali būti pakuojami ir išpakuojami, tačiau naudoja specializuotą Android mechanizmą android.os.Parcelable. Šis mechanizmas yra efektyvesnis duomenų perdavimui tarp Android komponentų, nes jis yra optimizuotas IPC (tarpprocesinei komunikacijai).

Savybė Serializable Parcelable
Mechanizmas Java refleksija Android Parceling API
Veikimas Mažiau efektyvus (naudoja refleksiją) Efektyvesnis
Įgyvendinimas Paprastesnis (žymeklio sąsaja) Reikalauja įgyvendinti writeToParcel, createFromParcel, describeContents metodus
Naudojimas Standartinė Java programa, nuotoliniai metodų iškvietimai (RMI) Specifinis Android, duomenų perdavimas tarp veiklų, paslaugų ir kt.
Būsto šablonas Mažiau kodo Daug kodo

Pavyzdys Parcelable įgyvendinimo:

// MyParcelableObject.java
package com.example.myapplication;

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

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

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

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

    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; // Paprastai 0, jei nėra specialių failų aprašų
    }

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

    // Gauti (praleisti trumpumo tikslais)
}