I, Serializable
- Quá trình
serialization
là quá trình chuyển đổi 1 object thành 1 luồng byte để lưu trữ vào trong bộ nhớ. - Quá trình
de-serialization
là quá trình ngược của serialization, nó sử dụng các byte trong bộ nhớ để phục hồi lại object. - Các byte được serialize không phụ thuộc vào nền tảng nào cả. Do đó, 1 object có thể serialize trên 1 nền tảng và de-serialize trên 1 nền tảng khác.
- Lợi ích của sử dụng quá trình serialization:
- 1, Lưu giữ state và data của object. Do đó, object có thể phục hồi sau này.
- 2, Có thể truyền 1 object sử dụng quá trình serialization qua network.
- Trong java, chúng ta có thể thực hiện quá trình serialization thông qua
Serializable
interface. - Một số điểm lưu ý khi sử dụng
Serializable
:- 1, Nếu parent class implement
Serializable
interface thì child class không cần phải implement nó. - 2, Chỉ có non-static và non-transient variable có thể thực hiện quá trình serialization.
- 3, Do static variable và transient variable không thực hiện được quá trình serialization do đó nếu bạn không muốn lưu trữ dữ liệu của non-static variable thì đánh dấu nó là transient.
- 4, Constructor của object không được gọi khi object được phục hồi bằng de-serialization.
- 5, Serialization sử dụng quá trình reflection.
- 1, Nếu parent class implement
II, Parcelable
- Để tối ưu hoá, Android sử dụng
Binder
để tạo điều kiện giao tiếp giữa các component vàBinder
kết nối vớiParcel
là message container. - Inteface
Parcelable
là 1 interface dùng để truyền dữ liệu giữa các component trong Android. - Khi thực hiện truyền dữ liệu, các state và data của object sẽ được lưu vào trong 1
Parcel
. - Sử dụng
Parcelable
nhanh gấp nhiều lần so vớiSerializable
nhưng việc triển khai trong Java khá dài dòng.1, Java
1 | public class MyParcelable implements Parcelable { |
- Bạn cần override và implement các method và class:
- writeToParcel(): method ghi state và data của object vào trong 1
Parcel
. - CREATOR: static variable dùng để phục hồi lại object từ
Parcel
.
- writeToParcel(): method ghi state và data của object vào trong 1
2, Kotlin
- Kotlin giúp bạn override các method và class trên. Bạn chỉ cần làm như sau:
1 | // Add in build.gradle in the app level. |
1 | // Just add @Parcelize annotation and implement Parcelable interface. |
III, So sánh giữa Serializable and Parcelable
Serializable | Parcelable |
---|---|
Dễ triển khai | Trong java, tốn nhiều mã nguồn để triển khai. |
Có thể sử dụng ở nhiều nền tảng | Chỉ dành riêng cho Android |
Chậm và sinh ra nhiều rác | Nhanh hơn |
Có thể truyền qua network | Không thể truyền qua network. |