Problemas de serialización causados por los métodos onSaveInstanceState() y setArguments()

Descripción del escenario

Cuando usa Umeng para compartir imágenes, la interfaz de la aplicación hereda el DialogFragment. Luego, después de saltar a otras aplicaciones en el canal para compartir, su aplicación fallará y se reiniciará. Después de observar el registro, se encuentra que el error informado es Parcelable encontró escritura IOException objeto serializable.

análisis de accidentes

Según el mensaje de error, sabía que era un error de serialización, así que fui a ver dónde se transfirió el valor y luego, en la clase donde ocurrió el error, vi que se había implementado serializable y que el objeto de clase personalizado interno había También implementado serializable.
Pero ¿por qué sigue ocurriendo este error?
Al observar el fenómeno, descubrí que todos los bloqueos ocurrieron poco después de saltar a otras aplicaciones. No habría ningún problema al abrir la interfaz en esta aplicación. ¿Podría ser causado por el reciclaje?

Problema de posicionamiento

Implemente el método onSaveInstanceState() en la interfaz problemática y observe lo que hace este método en la clase principal. Luego descubrí que este método se usa principalmente para guardar datos temporales cuando la interfaz desaparece debido a circunstancias inesperadas, y se usa principalmente para la recuperación posterior de la interfaz. Artículo de referencia: ¿Cuándo se llama al método onSaveInstanceStante()? (Reimprimir/organizar)
Entonces, ¿cómo guardamos nuestros datos en el paquete correspondiente? Obviamente no hemos realizado ningún procesamiento de guardado de datos. ¿Cómo sabe este método qué paquete quiero guardar?
Luego vi mi método para pasar valores, setArguments(). Este método se utiliza exactamente para guardar datos en la situación anterior. Artículo de referencia: ¿Por qué utilizar Fragment.setArguments (paquete de paquete) para pasar parámetros
? Nota: situaciones inesperadas incluyen que el usuario presione el botón de inicio, cambie entre pantallas horizontales y verticales y salte al cambiar de aplicación.

en conclusión

Cuando se utiliza la serialización serializable para guardar valores en un fragmento, se producirá una excepción de serialización, la razón es que el método de serialización utilizado durante el reciclaje es Parcelable. Por lo tanto, implementar Parcelable en la clase de serialización puede resolver el problema.
PD: La conclusión es algo especulativa, porque no he observado ni estudiado cuidadosamente los dos métodos anteriores. Si hay algún error u omisión, indíquelo y lo revisaremos y corregiremos después de estudiarlo más adelante.

Supongo que te gusta

Origin blog.csdn.net/qq_39734865/article/details/104522703
Recomendado
Clasificación