Android: любой ярлык для Serializable из Parcelable без использования marshall ()?

Я знаю о различиях в производительности между Parcelable (быстро) и Serializable ] (медленный). Однако мне нужно постоянно хранить определенную информацию о приложении, а не только в рамках одного жизненного цикла, поэтому onSaveInstanceState и связанные методы, использующие объекты Parcelable, не подходят.

Поэтому я обратил свое внимание на Serializable . В первую очередь у меня есть типы AbstractList для хранения - и это нормально, поскольку они реализуют Serializable . Однако, многие из типов, которые я храню внутри них, являются Parcelable , но не Serializable , например RectF .

Я подумал «нет проблем», так как я могу легко сгенерировать Посылка через Parcelable.writeToParcel (parcel, flags) , затем вызовите на ней marshall () , чтобы создать байт [] , который я могу сериализовать и десериализовать. Я решил использовать дженерики; создать SerializableParcelable , реализующий класс Serializable , позволяющий найти универсальное решение для всех типов Parcelable , которые я хочу сериализовать. Затем я бы, например, сохранил каждый RectF внутри этой оболочки в ArrayList , и вот список и его Parcelable содержимое можно сериализовать.

Однако, в документации API указано, что marshall () не может использоваться для постоянного хранения:

общедоступный конечный байт [] marshall ()

Возвращает необработанные байты посылки.

Данные вы получаете здесь не должны размещаться в каком-либо постоянном хранилище (на локальном диске, в сети и т. д.). Для этого вы должны использовать стандартную сериализацию или другой общий механизм сериализации. Упорядоченное представление Parcel сильно оптимизировано для локального IPC и, как таковое, не пытается поддерживать совместимость с данными, созданными в разных версиях платформы.

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

Кто-нибудь знает «правильный» ярлык для сериализации Parcelable объект без использования marshall () ? Или мне пахать, не обращая внимания на указанное предупреждение? Возможно, лучше использовать базу данных SQLite, но я не уверен и хотел бы получить ваш совет.

Большое спасибо.

7
задан KomodoDave 5 May 2011 в 11:40
поделиться