Junior
Ce sunt obiectele serializabile și parcelabile?
sobes.tech AI
Răspuns de la AI
Obiectele serializabile pot fi transformate în flux de octeți pentru stocare sau transfer, folosind mecanismul standard Java java.io.Serializable.
Obiectele parcelabile pot fi, de asemenea, împachetate și despachetate, dar utilizează un mecanism specializat Android android.os.Parcelable. Acest mecanism este mai eficient pentru transferul de date între componentele Android, deoarece este optimizat pentru IPC (Comunicare între Procese).
| Caracteristică | Serializable |
Parcelable |
|---|---|---|
| Mecanism | Reflexie Java | API de parcelare Android |
| Performanță | Mai puțin eficient (folosește reflexie) | Mai eficient |
| Implementare | Mai simplu (interfață de marcaj) | Necesită implementarea metodelor writeToParcel, createFromParcel, describeContents |
| Utilizare | Aplicație Java standard, apeluri RMI | Specific pentru Android, transfer de date între activități, servicii etc. |
| Șablon | Mai puțin cod | Mai mult cod |
Exemplu de implementare a 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; // De obicei 0, dacă nu există descriptor de fișier special
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Getters (omise pentru concizie)
}