в чем разница между Parcelable и сериализацией, используемой в android

Я хочу знать точно ,

  1. должен ли я использовать parcelable или serialization техника для передачи данных от одного вида деятельности к другому?
  2. обязательно ли используйте один из них для передачи данных от одного к другому?
  3. когда я должен использовать их?
  4. и точная разница между ними и производительностью обоих из них в аспектах java.

спасибо заранее.


 public class GetSetClass implements Serializable {
    private int dt = 10;

    /** pass any object, drwabale */
    public int getDt() {
        return dt;
    }

    public void setDt(int dt) {
        this.dt = dt;
    }
}

5 ответов


должен ли я использовать метод parcelable или сериализации для отправки данных из одного действия в другое.

если вы отправляете данные/объект непримитивного типа в другое действие через intent вы должны либо Serialize или реализовать Parcelable для этого объекта. Предпочтительный метод Parcelable так как это не влияет на производительность.

обязательно ли использовать один из них для передачи данных от одного к другому. / когда должен ли я их использовать.

это только обязательно / используется для отправки объектов данных непримитивного типа.

и точная разница между ними и производительность обоих из них в аспектах java.

сериализация влияет на производительность. Для более подробной информации, проверьте эту ссылку для Android Parcelable и Serializable


эти понятия связаны с Межпроцессной связью (IPC).

при передаче данных между двумя приложениями, мы должны убедиться, что оба приложения должны понимать формат данных, который посылается.

особенно, когда вы отправляете не примитивные значения типа данных, такие как классы и объекты между двумя приложениями, мы должны преобразовать их в понятный формат операционной системы. O. S понимает только примитивные типы (ints, chars и т. д.). Причина преобразования в том, что для передачи данных мы должны использовать канал связи O. S.

этот процесс преобразования не примитивных типов в примитивы и отправки в другое приложение по некоторому каналу связи называется сериализацией. Обратный процесс называется Де-сериализации.

в Java, МПК в значительной степени зависит от Serializables для сериализации. Но сериализация разработана keep desktop applications в виду. Когда вы делаете IPC в мобильные приложения мы должны убедиться, что процесс IPC не слишком тяжелый.

в простых терминах сериализация является тяжелой концепцией для IPC. Поэтому вместо сериализации Android выбрал связующие для достижения легкого веса между процессами связи. Связыватели внутренне сильно зависят от посылок, чтобы сделать IPC. Участки света serializables вес. Предпочтительно использовать участки для маршалинга объектов в байтовые потоки.

Примечание: связыватель IPC сильно зависит от Концепция общей памяти, чтобы убедиться, что нет большого дублирования данных при совместном использовании между приложениями.


получил очень хорошее объяснение разницы между Parcelable и сериализацией.

чтобы начать с Вашего вопроса, хотя прошло много времени, это может помочь другим:

  1. должен ли я использовать метод parcelable или сериализации для отправки данных из одного действия в другое?

Ans: Parcelable-лучший выбор (почему объяснено позже).

  1. обязательно ли использовать один из них для отправка данных от одного к другому?

Ans: да, поскольку отправка данных (объекта) от одного к другому требует записи и извлечения потоков байтов, что может быть сделано либо с помощью parcelable, либо сериализации.

  1. когда я должен использовать их?

Ans: эту часть вы arleady ответил я.e, передача данных от одного вида деятельности к другому.

  1. и точная разница между ними и производительность обоих из них в аспектах java.

Ans: 1. Parcelable хорошо документирован в Android SDK; сериализация, с другой стороны, доступна на Java.

  1. в Parcelable разработчики пишут пользовательский код для маршалинга и unmarshaling, поэтому он создает меньше объектов мусора по сравнению с сериализацией. Производительность Parcelable над сериализацией значительно улучшается (примерно в два раза быстрее), из-за этого обычая реализация.

  2. сериализация-это интерфейс, который подразумевает, что пользователь не может упаковать данные в соответствии с их требованиями. В сериализации операция маршалинга выполняется на виртуальной машине Java (JVM) с помощью API отражения Java. Это помогает идентифицировать член и поведение объектов Java, но также приводит к созданию большого количества объектов мусора. Из-за этого процесс сериализации медленный по сравнению с Parcelable.

ответ взят из: этой ссылке

Читайте также:сериализация объяснил


Сериализуемая Java:- Serializable происходит от стандартной Java и намного проще реализовать все, что вам нужно сделать, это реализовать интерфейс Serializable и добавить переопределение двух методов.
проблема с Сериализуемым заключается в том, что он пытается соответствующим образом обрабатывать все под солнцем и использует много отражения, чтобы определить типы, которые сериализуются. Таким образом, он становится мясистым объектом.

Андроиды Parcelable:- Андроид Inter-Process Communication (aipc) файл, чтобы сказать Android, как должен маршал и unmarshal ваш объект.Он менее общий и не использует отражение, поэтому он должен иметь гораздо меньше накладных расходов и быть намного быстрее.

читать дальше от http://www.3pillarglobal.com/blog/parcelable-vs-java-serialization-android-app-development


Как парцелляция и сериализации способы Маршалл и распаковать данные. в android это используется для передачи непримитивных типов данных между компонентами и процессами. в общем, android позволяет либо сериализуемые или parcelable объекты, так что вы можете выбрать свой метод. исключение составляет интерфейс AIDL. объекты должны быть parcelable быть переданы / возвращены.

сериализация использует отражение для автоматического Маршалла и unmarshal данных. в большинстве случаев реализация интерфейс маркера достаточно просто работать. с parceling, вы должны написать код Маршаллу и unmarshal данные самостоятельно.

и, следовательно, именно поэтому parceling быстрее. объект не нужно отражать, чтобы обнаружить поля. это отражение замедляет процесс.

сериализация также имеет встроенное управление версиями ... если вы попытаетесь unmarshal к другой версии класса объекта, который был маршалирован, процесс завершится неудачей в предсказуемом путь. с parceling вы можете сделать то же самое, но вам нужно реализовать его самостоятельно, добавив поле "версия" к вашему объекту и код, который проверяет версию при unmarhsaling.

Это, как говорится, я, как правило, использовать сериализацию. с простыми предметами вы не заметите разницы. при обнаружении проблем с производительностью всегда можно изменить использование parceling позже в разработке.