Я знаю о различиях в производительности между Parcelable
(быстро) и Serializable
] (медленный). Однако мне нужно постоянно хранить определенную информацию о приложении, а не только в рамках одного жизненного цикла, поэтому onSaveInstanceState и связанные методы, использующие объекты Parcelable, не подходят.
Поэтому я обратил свое внимание на Serializable
. В первую очередь у меня есть типы AbstractList
для хранения - и это нормально, поскольку они реализуют Serializable
. Однако, многие из типов, которые я храню внутри них, являются Parcelable
, но не Serializable
, например RectF
.
Я подумал «нет проблем», так как я могу легко сгенерировать Посылка через Parcelable.writeToParcel (parcel, flags)
, затем вызовите на ней marshall ()
, чтобы создать байт []
, который я могу сериализовать и десериализовать. Я решил использовать дженерики; создать SerializableParcelable
, позволяющий найти универсальное решение для всех типов Parcelable
, которые я хочу сериализовать. Затем я бы, например, сохранил каждый RectF внутри этой оболочки в ArrayList
, и вот список и его Parcelable
содержимое можно сериализовать.
Однако, в документации API указано, что marshall ()
не может использоваться для постоянного хранения:
общедоступный конечный байт [] marshall ()
Возвращает необработанные байты посылки.
Данные вы получаете здесь не должны размещаться в каком-либо постоянном хранилище (на локальном диске, в сети и т. д.). Для этого вы должны использовать стандартную сериализацию или другой общий механизм сериализации. Упорядоченное представление Parcel сильно оптимизировано для локального IPC и, как таковое, не пытается поддерживать совместимость с данными, созданными в разных версиях платформы.
Итак, я застрял. Я могу проигнорировать это предупреждение и следовать по маршруту, описанному выше, или же обойти эту проблему, расширив каждый отдельный Parcelable
Я хочу сериализовать и создать специальные методы сериализации, что кажется чрезвычайно расточительным по времени и усилиям.
Кто-нибудь знает «правильный» ярлык для сериализации Parcelable
объект без использования marshall ()
? Или мне пахать, не обращая внимания на указанное предупреждение? Возможно, лучше использовать базу данных SQLite, но я не уверен и хотел бы получить ваш совет.
Большое спасибо.