Прямые ссылки на публичные уроки для быстрого старта и стабильной индексации lesson-страниц.
Parcelable — более эффективный инструмент, разработанный специально для Android. Он работает, создавая объект Parcelable, который может быть сохранён или передан между компонентами приложения через методы writeParcelable и readParcelable. Parcelable сериализует объекты быстрее, чем Serializable: он не создаёт копию объекта в памяти и требует меньше ресурсов.
Реализация интерфейса делится на два подхода: с ручной реализацией методов и с помощью плагина.
Наследуемся от интерфейса Parcelable. Среда разработки сообщит, что класс обязан реализовать методы интерфейса и предоставить поле CREATOR. Имплементировать их можно через контекстное меню.
Этот способ позволяет гибко настроить сериализацию и десериализацию, однако требует значительного объёма кода.
describeContents — описывает специфическое содержимое Parcelable. Обычно возвращает 0 как значение по умолчанию.writeToParcel — сериализует объект, записывая его данные в Parcel. Для каждого свойства прописывается метод по его типу. Boolean передаётся как 1 или 0.Parcel — восстанавливает объект из сериализованных данных: свойствам класса присваиваются значения, считанные из объекта Parcel.CREATOR — обязательный элемент реализации Parcelable, помогающий системе Android восстанавливать объект из Parcel. Содержит два метода:
createFromParcel — создаёт экземпляр класса ExtraWord из объекта Parcel, восстанавливая переданный объект.newArray — создаёт массив объектов ExtraWord, заполненный null. Используется при передаче нескольких объектов сразу.Как это работает вместе:
word сериализуется в Parcel с помощью writeToParcel() и добавляется в Intent.createFromParcel() из объекта CREATOR, который восстанавливает объект ExtraWord.Для получения объекта в принимающей Activity используется метод getParcelableExtra. Приведение типа здесь не требуется — вместо этого добавляется оператор null safety при обращении к объекту.
Этот способ значительно удобнее: весь код, который требовалось писать вручную, генерируется автоматически под капотом плагином kotlin-parcelize.
Для использования нужно наследоваться от интерфейса Parcelable и добавить аннотацию @Parcelize к классу.
Плагин поставляется вместе с Kotlin-плагином, поэтому достаточно включить его в gradle-файле:
id("kotlin-parcelize")
После подключения импортируем аннотацию из пакета kotlinx.parcelize — и реализация готова. Во второй Activity никаких изменений не требуется.
Этот способ рекомендуется к использованию в большинстве случаев: он выигрывает по производительности и создан специально под Android.