Sobes.tech
Junior

Kas ir serializējami un parcelējami objekti?

sobes.tech AI

Atbilde no AI

Serializējami objekti var tikt pārveidoti par baitu plūsmu, lai tos saglabātu vai pārraidītu, izmantojot standarta Java mehānismu java.io.Serializable.

Parcelējami objekti arī var tikt iepakoti un izpakoti, bet izmanto specializētu Android mehānismu android.os.Parcelable. Šis mehānisms ir efektīvāks datu pārraidē starp Android komponentiem, jo tas ir optimizēts IPC (starprozesa komunikācijai).

Raksturlielums Serializable Parcelable
Mehānisms Java refleksija Android Parceling API
Veiktspēja Mazāk efektīvs (izmanto refleksiju) Efektīvāks
Īstenošana Vienkāršāka (zīmēšanas interfeiss) Prasa īstenot writeToParcel, createFromParcel, describeContents metodus
Izmantošana Standarta Java lietojumprogramma, attālināti metožu izsaukumi (RMI) Specifiska Android, datu pārraide starp aktivitātēm, pakalpojumiem utt.
Bojlerplējs Mazāk koda Vairāk koda

Piemērs Parcelable īstenošanai:

// 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; // Parasti 0, ja nav īpašu failu aprakstītāju
    }

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

    // Gētteri (izlaisti īsuma dēļ)
}