Seperti yang saya pahami, Bundle
dan Parcelable
termasuk cara Android melakukan serialisasi masuk Ini digunakan misalnya dalam melewatkan data di antara aktivitas. Tapi saya bertanya-tanya, apakah ada manfaat dalam menggunakan Parcelable
daripada serialisasi klasik dalam kasus menyimpan keadaan objek bisnis saya ke memori internal misalnya? Akankah lebih sederhana atau lebih cepat dari cara klasik? Di mana saya harus menggunakan serialisasi klasik dan di mana lebih baik menggunakan bundel?
sumber
getBundle
metode, lalu memanggilnya dariwriteToParcel
asdest.writeBundle(getBundle());
dan saya memiliki kedua opsi yang tersedia di objek secara otomatis. Ada fitur Parcel yang menarik untuk objek hidup yang dicatat di sini: developer.android.com/reference/android/os/Parcel.htmlSerializable
sangat lambat di Android. Pada kenyataannya, garis batas tidak berguna dalam banyak kasus.Parcel
danParcelable
sangat cepat, tetapi dokumentasinya mengatakan Anda tidak boleh menggunakannya untuk serialisasi tujuan umum ke penyimpanan, karena penerapannya bervariasi dengan versi Android yang berbeda (misalnya, pembaruan OS dapat merusak aplikasi yang mengandalkannya).Solusi terbaik untuk masalah serialisasi data ke penyimpanan dengan kecepatan yang wajar adalah menggulung sendiri. Saya pribadi menggunakan salah satu kelas utilitas saya sendiri yang memiliki antarmuka yang mirip
Parcel
dan yang dapat membuat serialisasi semua tipe standar dengan sangat efisien (dengan mengorbankan keamanan tipe). Berikut adalah versi ringkasannya:sumber
Lihat seberapa cepat Parcelable daripada Serializable.
dari WHY WE LOVE PARCELABLE
dari Parcelable vs Serializable
sumber
Jika Anda membutuhkan serialisasi untuk keperluan penyimpanan tetapi ingin menghindari penalti kecepatan refleksi yang disebabkan oleh antarmuka Serializable Anda harus secara eksplisit membuat protokol serialisasi Anda sendiri dengan antarmuka Eksternalizable .
Ketika diterapkan dengan benar, ini cocok dengan kecepatan Parcelable dan juga memperhitungkan kompatibilitas antara berbagai versi Android dan / atau platform Java.
Artikel ini mungkin juga menjelaskan semuanya:
Apa perbedaan antara Serializable dan Externalizable di Java?
Pada catatan samping, ini juga merupakan teknik serialisasi tercepat dalam banyak tolok ukur, mengalahkan Kryo, Avro, Protocol Buffer dan Jackson (json):
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
sumber
Tampaknya saat ini perbedaannya tidak begitu mencolok, setidaknya tidak ketika Anda menjalankannya di antara aktivitas Anda sendiri.
Menurut tes yang ditampilkan di situs web ini , Parcelable sekitar 10 kali lebih cepat pada perangkat terbaru (seperti nexus 10), dan 17 lebih cepat pada perangkat lama (seperti keinginan Z)
jadi terserah Anda untuk memutuskan apakah itu sepadan.
mungkin untuk kelas yang relatif kecil dan sederhana, Serializable baik-baik saja, dan selebihnya, Anda harus menggunakan Parcelable
sumber
Parcelable terutama terkait dengan IPC menggunakan infrastruktur Binder , di mana data diteruskan sebagai Paket .
Karena Android sangat bergantung pada Binder untuk sebagian besar, jika tidak semua, tugas IPC, masuk akal untuk mengimplementasikan Parcelable di sebagian besar tempat, dan terutama di framework, karena memungkinkan untuk meneruskan objek ke proses lain jika Anda membutuhkannya. Itu membuat objek "bisa diangkut".
Tetapi jika Anda memiliki lapisan bisnis non-Android khusus yang secara ekstensif menggunakan serializable untuk menyimpan status objek, dan hanya perlu menyimpannya ke sistem file, maka saya pikir serializable itu baik-baik saja. Ini memungkinkan untuk menghindari kode pelat boiler Parcelable.
sumber
Berdasarkan artikel ini http://www.mooproductions.org/node/6?page=5 Parcelable seharusnya lebih cepat.
Tidak disebutkan dalam artikel, adalah bahwa saya tidak berpikir bahwa objek serializable akan bekerja di AIDL untuk layanan jarak jauh.
sumber
Saya hanya menggunakan GSON -> Serialise to JSON String -> Restore Object dari JSON String.
sumber
Parcelable juga menawarkan implementasi kustom di mana pengguna mendapat kesempatan untuk membagi setiap objeknya dengan menimpa writeToParcel (), Namun serialisasi tidak menerapkan kustomisasi ini karena caranya meneruskan data melibatkan API refleksi JAVA.
sumber