Middle
Jaka jest różnica między Serializable a Parcelable w Android?
sobes.tech AI
Odpowiedź od AI
Główna różnica dotyczy wydajności i sposobu implementacji.
-
Serializable:- Standardowy interfejs z Java SE.
- Łatwiejszy w implementacji (wystarczy zaimplementować interfejs).
- Używa Java Reflection API do serializacji, co jest wolniejsze i wymaga więcej pamięci.
- Odpowiedni dla małych obiektów lub gdy wydajność serializacji nie jest krytyczna.
-
Parcelable:- Specyficzny interfejs dla Android SDK.
- Wymaga jawnego opisu procesu serializacji/deserializacji.
- Znacznie szybszy i bardziej efektywny pod względem użycia pamięci, ponieważ nie opiera się na Reflection.
- Lepszy wybór do przekazywania obiektów między komponentami Android (Activity, Service, BroadcastReceiver) oraz do zapisywania stanu.
Aby zaimplementować Parcelable, należy:
- Zaimplementować interfejs
Parcelable. - Zaimplementować metodę
writeToParcel()do zapisu danych doParcel. - Zaimplementować metodę
describeContents(). - Utworzyć statyczny obiekt
CREATOR, który jest implementacjąParcelable.Creator.
import android.os.Parcel;
import android.os.Parcelable;
public class MyParcelableObject implements Parcelable {
private int value;
private String name;
public MyParcelableObject(int value, String name) {
this.value = value;
this.name = name;
}
protected MyParcelableObject(Parcel in) {
value = in.readInt();
name = in.readString();
}
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;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(value);
dest.writeString(name);
}
}
Porównanie:
| Cecha | Serializable | Parcelable |
|---|---|---|
| Biblioteka | java.io |
android.os |
| Wydajność | Niska (używa Reflection) | Wysoka |
| Efektywność pamięci | Niska | Wysoka |
| Implementacja | Prostsza | Bardziej skomplikowana |
| Użycie | Java ogólne, małe dane | Android, przekazywanie danych między komponentami |