Как работает Bundle?
Я не спрашиваю, как я использую это, и что это делает, как это работает. Вопрос пришел ко мне, когда я подумал, почему они просто не поставили putExtra(String,Object)
так что я могу передать объект. Очевидно, они просто не забыли сделать это, а не то, как работает Bundle - это не то, что вы можете сделать.
PS: Serializable
или же Parcelable
это то, что вы не можете реализовать в каждом классе, который вы создаете, поэтому они не являются заменой для putExtra(String,Object)
4 ответа
Очевидно, они просто не забыли сделать это
Правильный.
Bundle
сам по себе Parcelable
, как отмечает Doctoror Drive. Точка позади Parcelable
чтобы иметь возможность поместить его в Parcel
и точка позади Parcel
это передать данные через границы процесса. Вы не можете передавать произвольные объекты через границы процесса, так же как вы не можете записывать произвольные объекты в файл и не можете передавать произвольные объекты через сокет.
По сути, класс parcelable или сериализуемый "преобразован" в общие двоичные файлы с вашей ссылкой на пакет. Это позволяет вам передавать и сохранять данные в базах данных, Intents
и больше.
Идея заключается в том, чтобы сохранить состояние некоторых Activity
или же Fragment
например как конечный автомат.
По умолчанию система использует состояние экземпляра Bundle для сохранения информации о каждом объекте View в макете вашей деятельности (например, текстовое значение, введенное в объект EditText). Таким образом, если ваш экземпляр активности будет уничтожен и воссоздан, состояние макета будет восстановлено до его предыдущего состояния без кода, который вам требуется. Однако ваша активность может содержать больше информации о состоянии, которую вы хотите восстановить, например, переменные-члены, которые отслеживают прогресс пользователя в активности.
Читайте больше в Воссоздании Действия.
По умолчанию механизм сериализации кодирует имя класса объекта, имена его непереходных полей (включая непубличные поля) и значения всех этих полей. На выходе получается непрозрачная последовательность байтов. Эти байты могут быть декодированы в новый эквивалентный экземпляр, если у декодера есть совместимые версии исходных классов. Изменение имени класса, имен полей или типов полей нарушает совместимость сериализации и усложняет взаимодействие между старой и новой версиями сериализуемого класса. Добавление или удаление полей также усложняет сериализацию между версиями класса, поскольку требует, чтобы ваш код справился с отсутствующими полями.
Узнайте больше на: http://developer.android.com/reference/java/io/Serializable.html
Большая часть API Parcel вращается вокруг чтения и записи данных различных типов.
Узнайте больше по адресу: http://developer.android.com/reference/android/os/Parcel.html и http://developer.android.com/reference/android/os/Parcelable.html
Комплектация документации: http://developer.android.com/reference/android/os/Bundle.html
Больше ссылок и сообщений
- http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/
- http://www.developerphil.com/parcelable-vs-serializable/
- Преимущество использования Parcelable вместо сериализации объекта
Надежда помогла.
Bundle
инвентарь Parcelable
поэтому все объекты, которые вы передаете, должны быть действительными для Parcel
, иначе. Пакет не может быть передан как Parcelable
,
Я не спрашиваю, как я использую это, и что это делает, как это работает.
Bundle
инвентарь Parcelable
так что должно пройти Objects
к Parcel
, Я бы предположил, что Bundles
поддерживаются HashMaps
учитывая их ключ, ценить природу.
Очевидно, они просто не забыли сделать это, а не то, как работает Bundle - это не то, что вы можете сделать.
Вы правы. Они не забыли это. Bundles
может использоваться для выполнения IPC (межпроцессное взаимодействие), поэтому система должна знать, как воссоздать Object
отсюда Bundle
инвентарь Parcelable
, Это заставляет вас ограничиваться одной и той же парадигмой. Если у вас есть обычай Object
он должен уметь сообщать Android, как перестраивать себя в процессах; следовательно, это необходимо реализовать Parcelable
,