Sobes.tech
Junior

Čo sú serializovateľné a parcelovateľné objekty?

sobes.tech AI

Odpoveď od AI

Serializovateľné objekty môžu byť prevedené na bajtový tok na uloženie alebo prenos pomocou štandardného mechanizmu Java java.io.Serializable.

Parcelovateľné objekty môžu byť tiež zabalené a rozbalené, ale používajú špecializovaný mechanizmus Android android.os.Parcelable. Tento mechanizmus je efektívnejší na prenos dát medzi komponentmi Android, pretože je optimalizovaný pre IPC (medzoprocesovú komunikáciu).

Charakteristika Serializable Parcelable
Mechanizmus Java reflexia Android Parceling API
Výkon Menej efektívne (používa reflexiu) Efektívnejšie
Implementácia Jednoduchšia (markerové rozhranie) Vyžaduje implementáciu metód writeToParcel, createFromParcel, describeContents
Použitie Štandardná Java aplikácia, vzdialené volania metód (RMI) Špecifické pre Android, prenos dát medzi aktivitami, službami a pod.
Bojlerplate Menej kódu Viac kódu

Príklad implementácie Parcelable:

// 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; // Zvyčajne 0, ak nie sú špeciálne súbory
    }

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

    // Gettery (vynechané pre stručnosť)
}