Я хочу знать точно,
parcelable
или сериализации
.
для передачи данных от одного вида деятельности к другому?Заранее спасибо.
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;
}
}
Эти понятия связаны в процесс взаимодействия (IPC).
При передаче данных между двумя приложениями, мы должны убедиться, что оба приложения должны понимать формат данных, который посылается.
Особенно, когда вы отправляете номера примитивных значений тип данных, как классы и объекты, между двумя приложениями, мы должны преобразовать их в понятный формат операционной системы. О. С. понимает только примитивные типы (целые числа, символы и т. д.). Оснований для пересчета у нас на канале О. связи для передачи данных.
Этот процесс преобразования не примитивных типов для примитивов и отправку по другим приложение по какому-то каналу связи называется сериализация. Обратный процесс называется Де-сериализации.
В Java, МПК в значительной степени зависит от Serializables для сериализации. Но сериализация предназначена поддерживать настольные приложения в виду. Когда вы делаете МПК в мобильных приложениях мы должны убедиться, что процесс IPC является не слишком тяжелым.
В простых терминах сериализации-это тяжелая концепция для IPC. Так что на месте сериализация Андроид выбрал вяжущих для достижения легкий вес в процессе коммуникации. Вяжущие внутренне сильно зависит от посылок, чтобы сделать МПК. Участки света serializables вес. Его предпочитают использовать участки для маршалинг объектов на байтовые потоки.
Примечание: связка IPC во многом зависит от общей концепции памяти, чтобы убедиться, что там не так много дублирования данных при обмене между приложениями.
Следует ли мне использовать технику посылки или сериализации для передачи данных от одного вида деятельности к другому.
Если вы отправляете данные/объект не примитивного типа в другой вид деятельности через intent
, вы должны либо Serialize
, либо реализовать Parcelable
для этого объекта. Предпочтительной техникой является Parcelable
, поскольку она не влияет на производительность.
Обязательно ли использовать один из них для передачи данных от одного объекта к другому. / когда я должен их использовать.
Это обязательно/используется только для отправки объектов данных непервичного типа.
и точная разница между ними и производительность обоих в аспектах java.
Сериализация действительно влияет на производительность. Для более подробной информации посмотрите эту ссылку https://stackoverflow.com/questions/9323044/android-parcelable-and-serializable
Есть очень хорошее объяснение разницы между Parcelable и сериализация.
Для начала ваш вопрос, хотя его долгое время, это может помочь другим:
- должен ли я использовать parcelable или метод сериализации для передачи данных от одной деятельности к другой?
Ответ: Parcelable-это лучший выбор (почему объяснил выше).
- обязательно ли использовать один из них для передачи данных от одного к другому?
Ответ: да, как отправлять данные (объект) с одного на другой требует потоками байтов, которые будут записаны и извлекать и что может быть сделано либо через parcelable или сериализации.
- когда я должен использовать их?
Ответ: в этой части вы arleady ответил я.е передаче данных из одной активности в другую.
- и точную разницу между ними и представления их в Java аспектах.
Ответ: 1. Parcelable хорошо документированы в SDK для Android; сериализации с другой стороны доступна в Java.
В Parcelable, разработчикам писать собственный код для маршалинга и распаковка поэтому он создает меньше объектов фигня по сравнению с сериализацией. Производительность Parcelable над сериализацией резко улучшается (примерно в два раза быстрее), из-за этого обычая реализации.
Сериализация-это интерфейс маркера, который подразумевает, что пользователь не может упаковать данные в соответствии с их требованиями. В сериализации маршалинга операция выполняется на виртуальной машине Java (JVM) с использованием Java API рефлексии. Это помогает идентифицировать члена Java-объекты и поведение, но также заканчивается создание большого количества объектов мусора. Благодаря этому, процесс сериализации является медленным по сравнению с Parcelable.
Ответ взят из: эту ссылку
См. также:сериализации объяснял
Java Serializable:.
Serializable происходит из стандартной Java и намного проще в реализации, все, что вам нужно сделать, это реализовать интерфейс Serializable и добавить переопределение двух методов.
Проблема с Serializable в том, что он пытается соответствующим образом обработать все под солнцем и использует много рефлексии, чтобы определить типы, которые сериализуются. Поэтому он превращается в "говяжий" объект.
Androids Parcelable:-...
Файл Android Inter-Process Communication (AIPC), чтобы сообщить Android, как он должен маршалить и размаршалить ваш объект. Он менее общий и не использует отражение, поэтому он должен иметь гораздо меньше накладных расходов и быть намного быстрее.
Читать далее http://www.3pillarglobal.com/blog/parcelable-vs-java-serialization-android-app-development
и посылка, и сериализация - это способы маршалла и размаршалла данных. в android это используется для передачи непервичных типов данных между компонентами и процессами. в целом, android допускает либо сериализуемые, либо посылаемые объекты, поэтому вы можете выбрать свой метод. исключение составляют интерфейсы AIDL. объекты должны быть посылаемыми для передачи/возврата.
Сериализация использует отражение для автоматического маршала и размаршала данных. в большинстве случаев реализации интерфейса маркера достаточно, чтобы он просто работал. при парсериализации вы должны написать код для маршала и размаршала данных самостоятельно.
и, следовательно, именно поэтому парсинг быстрее. объект не нужно отражать, чтобы обнаружить поля. именно отражение делает его медленным.
Сериализация также имеет встроенную версионность... если вы попытаетесь распарсить объект в другой версии класса, который был распарсен, процесс завершится предсказуемым образом. при парсинге вы можете сделать то же самое, но вам нужно реализовать это самостоятельно, добавив поле "версия" в ваш объект, и код, который проверяет версию при распарсинге.
С учетом сказанного, я обычно использую сериализацию. с простыми объектами вы не заметите разницы. вы всегда можете перейти на использование парсериализации позже в процессе разработки, если обнаружите проблемы с производительностью.