Soy consciente de las diferencias de rendimiento entre Parcelable
(rápido) y Serializable
(lento). Sin embargo, necesito almacenar cierta información de la aplicación de manera persistente, no solo dentro de un ciclo de vida, por lo tanto, onSaveInstanceState y los métodos asociados que utilizan objetos Parcelable no son apropiados.Android: Cualquier atajo a Serializable de Parcelable sin usar marshall()?
así que di vuelta a mi atención Serializable
. Principalmente tengo AbstractList
tipos para almacenar, lo cual está bien, ya que implementan Serializable
. Sin embargo, muchos de los tipos que almaceno dentro de estos son Parcelable
pero no Serializable
, p. RectF
.
pensé "no hay problema", ya que puede generar fácilmente un paquete a través de Parcelable.writeToParcel(parcel, flags)
luego llamar marshall()
en él para crear un byte[]
que puedo serializar y deserializar. Pensé que usaría genéricos; crear una clase SerializableParcelable<Parcelable> implements Serializable
, lo que permite una solución única para todos los tipos Parcelable
que deseo serializar. Entonces yo, por ejemplo, almacenar cada RectF dentro de este envoltorio dentro ArrayList
, y lo-y-he aquí la lista y sus contenidos son Parcelable
serializable.
Sin embargo, los documentos de la API afirman que marshall()
no debe ser utilizado para el almacenamiento persistente:
último byte pública [] Marshall()
devuelve los bytes sin formato de la parcela.
Los datos que se recuperan aquí no deben estar en ningún tipo de almacenamiento persistente (en el disco local, a través de una red, etc.). Para eso, debe usar la serialización estándar u otro tipo de mecanismo de serialización general. La representación ordenada de Parcel está altamente optimizada para IPC local y, como tal, no intenta mantener la compatibilidad con los datos creados en diferentes versiones de la plataforma.
Así que ahora estoy atascado. Puedo ignorar ya sea esta advertencia y seguir la ruta que he descrito anteriormente, o bien eludir el problema mediante la extensión de cada individuo Parcelable
quiero serializar y la creación de métodos de serialización a medida, lo que parece muy inútil de tiempo y esfuerzo.
¿Alguien sabe de un atajo 'correcto' para serializar un objeto Parcelable
sin usar marshall()
? ¿O debo arar sin prestar atención a la advertencia especificada? Tal vez una base de datos SQLite es el camino a seguir, pero no estoy seguro y me gustaría su consejo.
Muchas gracias.
¿Hay alguna razón por la cual no puede utilizó 'SharedPreferences' para almacenar los datos persistentes? Oh, espera, la respuesta es obvia, lo siento! –
SharedPreferences solo ofrece métodos para el almacenamiento persistente de tipos simples como int, String, etc. No hay funcionalidad para almacenar un Parcelable, Serializable o byte []. – KomodoDave
Sí, me acabo de dar cuenta de eso./o \ –