Sobes.tech
Junior

Mi azok a serializálható és csomagolható objektumok?

sobes.tech MI

Válasz az MI-től

A szerializálható objektumokat bájtsorozattá lehet alakítani tárolás vagy átvitel céljából, a Java java.io.Serializable szabványos mechanizmusát használva.

A csomagolható objektumokat is csomagolni és kicsomagolni lehet, de ehhez az Android android.os.Parcelable speciális mechanizmusát használják. Ez a mechanizmus hatékonyabb az Android komponensek közötti adatok átvitelében, mivel az IPC-re (Inter-Process Communication) van optimalizálva.

Jellemző Serializable Parcelable
Mechanizmus Java reflexió Android Parceling API
Teljesítmény Kevésbé hatékony (reflexiót használ) Hatékonyabb
Megvalósítás Egyszerűbb (jelző interfész) Meg kell valósítani a writeToParcel, createFromParcel, describeContents metódusokat
Használat Szokásos Java alkalmazás, RMI hívások Android-specifikus, adatok átadása aktivitások között, szolgáltatások stb.
Példa Kevesebb kód Több kód

A Parcelable megvalósításának példája:

// 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; // Általában 0, ha nincsenek speciális fájldeskriptorok
    }

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

    // Getters (kihagyva rövidség kedvéért)
}