Главная » Разработка для Android » Классы, поддерживающие сериализацию – Android

0

 

API Parcel может работать не только с шестью примитивными типами данных, которые упомянуты в предыдущем разделе. В документации Android приводится полный список parcel able-типов, и их удобно подразделять на четыре группы.

К первой группе – простые типы – относятся null, шесть примитивных типов (int, float и т. д.) и упакованные (boxed) версии шести примитивных типов (Integer, Float и т. д.).

Следующая группа включает в себя типы объектов, реализующие Serial іzable или Parcelablе. Эти объекты не являются простыми, но им известно, как сериализовать себя.

К еще одной группе – типы коллекций – относятся массивы, списки, карты, пакеты и разреженные массивы объектов тех типов, которые входят в две предыдущие группы (int[], float[], ArrayList<?>, HashMap<String, ?>, Bundle<?>, SparseArray<?> и т. д.).

Наконец, есть несколько особых случаев: CharSequence и активные объекты (IBinder).

В то время как все эти типы допускают маршалинг в Parcel, с типами Senalіzable и Map так лучше не поступать. Как было указано выше, Android поддерживает нативную сериализацию Java. Ее реализация сильно уступает по эффективности остальным частям Parcelable. Реализация интерфейса Serialіzable – не лучший способ сделать объект parcelablе. Напротив, объекты должны реализовывать Parcelabl е и добавлять объект CREATOR и метод writeToParcel, как это описано в подразделе «Объект Parcelable для передачи данных» выше. Данная задача может быть довольно трудоемкой, если иерархия объектов сложна. Но оптимизация производительности, которая при этом достигается, обычно стоит потраченных усилий.

Еще один тип, который не следует делать parcelable, – это Map. Вообще, Parcel не поддерживает карты; исключение представляют только такие карты, ключи которых являются строковыми. Специфичный для Android тип Bundle предоставляет аналогичную функциональность – карту со строковыми ключами, – но к тому же он гарантирует безопасность типов. Объекты добавляются к Bundl е при помощи таких методов, как putDouble и putSparseParcelableArray, по одному методу для каждого parcelable-типа. Bundle очень похож на карту, за тем исключением, что он может содержать различные типы объектов для разных ключей, гарантируя при этом полную безопасность типов. Пользуясь Bundle, вы избегаете целого класса ошибок, которые сложно находить и которые возникают, когда, например, сериа-лизованный float ошибочно принимается за int.

Безопасность типов – еще одна причина, по которой методы writeTypedArray и writeTypedList предпочительнее их нетипизированных аналогов writeArray HwriteList.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии