Является ли использование Serializable в Android плохим?

Я читал много сообщений и статей, воспевающих скорость Parcelable над Serializable. Я использовал некоторое время для передачи данных между действиями через Intents и еще не заметил разницу в скорости при переключении между ними. Типичный объем данных, которые я должен передать, составляет от 5 до 15 вложенных объектов по 2-5 полей.

Поскольку у меня есть около 30 classов, которые должны быть переданы, реализация Parcelable требует большого количества кода шаблона, который добавляет время обслуживания. Одним из моих текущих требований является также то, что скомпилированный код должен быть как можно меньше; Я ожидаю, что я мог бы сэкономить место, используя Serializable над Parcelable.

Должен ли я использовать Parcelable или нет причин использовать его для Serializable для таких небольших объемов данных? Или есть еще одна причина, почему я не должен использовать Serializable?

    Для использования в памяти Parcelable далеко, намного лучше, чем Serializable. Я настоятельно рекомендую не использовать Serializable.

    Вы не можете использовать Parcelable для данных, которые будут храниться на диске (потому что у него нет хороших гарантий согласованности данных при изменении вещей), однако Serializable достаточно медленный, и я настоятельно рекомендую не использовать его там. Вам лучше записывать данные самостоятельно.

    Кроме того, одна из проблем с производительностью с помощью Serializable заключается в том, что она заканчивается с помощью множества временных объектов, что вызывает много активности GC в вашем приложении. Это довольно отвратительно. :}

    Продолжайте использовать сериализацию. Вы увидите много людей в Интернете, которые расскажут вам, что сериализация очень медленная и неэффективная. Это верно. Но одна вещь, которую вы никогда не хотите делать в качестве программиста, – это любой комментарий о производительности как абсолютный.

    Спросите себя, если сериализация замедляет вашу программу. Вы замечаете, когда это происходит от активности к активности? Вы замечаете, когда он сохраняет / загружает? Если нет, все в порядке. Когда вы переходите к большому количеству кода ручной сериализации, вы не получите меньшего размера, поэтому нет никаких преимуществ. Так что, если он в 100 раз медленнее альтернативы, если в 100 раз медленнее означает 10 мс вместо 0,1 мс? Ты тоже не увидишь, так кого это волнует? И почему кто-то вкладывает огромные усилия в письменную сериализацию для 30 classов, когда это не будет иметь заметной разницы в производительности?

    Все просто слепо заявляют, что Parcelable лучше и быстрее, чем Serializable, но никто не пытался поддержать его заявления любыми доказательствами. Я решил проверить это сам, и у меня были очень интересные результаты.

    Обычная сериализация Java на среднем Android-устройстве (если все сделано правильно) примерно в 3,6 раза быстрее, чем Parcelable для записи и примерно в 1,6 раза быстрее для чтения.

    Вы можете проверить мой тестовый проект здесь: https://bitbucket.org/afrishman/androidserializationtest

    Кто-нибудь рассматривал сериализацию с использованием JSON и передачу данных в виде строки? GSON и Jackson должны быть достаточно эффективными, чтобы быть конкурентом Parcelable, а также Serializable.

    Interesting Posts

    Единовременный эквивалент сохраненной процедуры MongoDB

    Установка Windows XP с USB-накопителя

    Play 2.4: Форма: не удалось найти неявное значение для сообщений параметров: play.api.i18n.Messages

    Разница между угловыми скобками и двойными кавычками “”, включая заголовочные файлы в C ++?

    Использование System.Windows.Forms.Timer.Start () / Stop () по сравнению с Enabled = true / false

    Как обрабатывать уведомление, когда приложение находится в фоновом режиме в Firebase

    Что вызывает двойные слэши в Linux?

    Дооснащение Ожидаемое BEGIN_OBJECT, но BEGIN_ARRAY

    Windows 10 – код Alt приводит к неправильному символу

    Как вызвать метод до уничтожения объекта сеанса?

    Порт USB 3.0 не работает с Windows 10

    Преобразование String в другую локаль в java

    Каковы отношения между Any, AnyVal, AnyRef, Object и как они отображаются при использовании в Java-коде?

    Почему кажется, что мой генератор случайных чисел не является случайным в C #?

    JFreeChart масштабирование ящиков с несколькими категориями

    Давайте будем гением компьютера.