Как работает 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

Больше ссылок и сообщений

Надежда помогла.

Bundle инвентарь Parcelable поэтому все объекты, которые вы передаете, должны быть действительными для Parcel, иначе. Пакет не может быть передан как Parcelable,

Я не спрашиваю, как я использую это, и что это делает, как это работает.

Bundle инвентарь Parcelableтак что должно пройти Objects к Parcel, Я бы предположил, что Bundles поддерживаются HashMaps учитывая их ключ, ценить природу.

Очевидно, они просто не забыли сделать это, а не то, как работает Bundle - это не то, что вы можете сделать.

Вы правы. Они не забыли это. Bundles может использоваться для выполнения IPC (межпроцессное взаимодействие), поэтому система должна знать, как воссоздать Objectотсюда Bundle инвентарь Parcelable, Это заставляет вас ограничиваться одной и той же парадигмой. Если у вас есть обычай Object он должен уметь сообщать Android, как перестраивать себя в процессах; следовательно, это необходимо реализовать Parcelable,

Другие вопросы по тегам