Насколько я понимаю, Bundle
и Parcelable
относится к способу сериализации в Android. Он используется, например, при передаче данных между действиями. Но мне интересно, есть ли какие-то преимущества в использовании Parcelable
вместо классической сериализации, например, в случае сохранения состояния моих бизнес-объектов во внутреннюю память? Будет ли это проще или быстрее классического? Где использовать классическую сериализацию, а где лучше использовать пакеты?
источник
getBundle
метод, затем вызываю его изwriteToParcel
as,dest.writeBundle(getBundle());
и у меня автоматически доступны оба параметра в объекте. Здесь отмечены интересные особенности Parcel для живых объектов: developer.android.com/reference/android/os/Parcel.htmlSerializable
до смешного медленно работает на Android. Фактически, граница во многих случаях бесполезна.Parcel
иParcelable
фантастически быстрые, но в документации говорится, что вы не должны использовать его для сериализации общего назначения в хранилище, поскольку реализация зависит от разных версий Android (то есть обновление ОС может сломать приложение, которое на него полагается).Лучшее решение проблемы сериализации данных в хранилище с разумной скоростью - использовать собственные. Я лично использую один из моих собственных служебных классов, который имеет аналогичный интерфейс
Parcel
и может очень эффективно сериализовать все стандартные типы (за счет безопасности типов). Вот его сокращенная версия:источник
Посмотрите, насколько Parcelable быстрее, чем Serializable.
из ПОЧЕМУ МЫ ЛЮБИМ РАСХОДЫ
от Parcelable против Serializable
источник
Если вам нужна сериализация, например, для целей хранения, но вы хотите избежать потери скорости отражения, вызванной интерфейсом Serializable, вы должны явно создать свой собственный протокол сериализации с интерфейсом Externalizable .
При правильной реализации это соответствует скорости Parcelable, а также учитывает совместимость между различными версиями Android и / или платформы Java.
Эта статья также может прояснить ситуацию:
В чем разница между Serializable и Externalizable в Java?
Кстати, это также самый быстрый метод сериализации во многих тестах, превосходящий Kryo, Avro, Protocol Buffers и Jackson (json):
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
источник
Кажется, что в настоящее время разница не так заметна, по крайней мере, когда вы запускаете ее между своими действиями.
Согласно тестам, показанным на этом веб-сайте , Parcelable примерно в 10 раз быстрее на новейших устройствах (например, Nexus 10) и примерно в 17 раз быстрее на старых (например, desire Z).
так что вам решать, стоит ли оно того.
возможно, для относительно небольших и простых классов Serializable подойдет, а для остальных вы должны использовать Parcelable
источник
Parcelable в основном связан с IPC с использованием инфраструктуры Binder , где данные передаются как Parcels .
Поскольку Android во многом полагается на Binder для большинства, если не для всех задач IPC, имеет смысл реализовать Parcelable в большинстве мест, особенно во фреймворке, потому что он позволяет передавать объект другому процессу, если вам это нужно. Это делает объекты «транспортабельными».
Но если у вас есть бизнес-уровень, не относящийся к Android, который широко использует сериализуемые объекты для сохранения состояний объекта и вам нужно только сохранять их в файловой системе, то я думаю, что сериализуемость - это нормально. Это позволяет избежать кода Parcelable Котельная.
источник
Основываясь на этой статье http://www.mooproductions.org/node/6?page=5 Parcelable должен быть быстрее.
В статье не упоминается, что я не думаю, что сериализуемые объекты будут работать в AIDL для удаленных сервисов.
источник
Я просто использую GSON -> Serialise to JSON String -> Restore Object from JSON String.
источник
Также Parcelable предлагает настраиваемую реализацию, в которой пользователь получает возможность разделить каждый из своих объектов, переопределив writeToParcel (). Однако сериализация не поддерживает эту настраиваемую реализацию, поскольку ее способ передачи данных включает API отражения JAVA.
источник