В Альфа-Банке разобрали ситуацию, когда
payload: Any в модели экрана объявлен как Serializable, а внутри в какой-то момент прилетает Intent. Итог - падение с NotSerializableException, потому что Intent поддерживает Parcelable, но не Serializable. Что предлагают:
• хранить рядом с объектом маркер типа сериализации;
• при записи в
Parcel динамически выбирать Parcelable или Serializable;• при чтении восстанавливать объект через соответствующий механизм.
Самое интересное - проблема не только в выборе способа сериализации, но и в
classLoader.Если читать обобщённый
Parcelable “в лоб”, можно уехать в BootClassLoader, где нет классов приложения, и десериализация сломается. Решение - в таких местах использовать contextClassLoader приложения. То же касается и Serializable. Полезный материал для тех, кто:
• поддерживает legacy Android-код;
• постепенно мигрирует на
Parcelable;• хочет лучше понимать, что происходит под капотом SDK.
https://habr.com/ru/companies/alfa/articles/1013158/
👉 @developer_mobila
