Преимущества использования Bundle вместо прямого намерения putExtra () в Android

В моем приложении Android я всегда использую putExtra() прямого putExtra() classа Intent для передачи любого количества значений в новую Activity .
Как это:

 Intent i = new Intent(this, MyActivity.class); i.putExtra(ID_EXTRA1, "1"); i.putExtra(ID_EXTRA2, "111"); startActivity(i); 

Я знаю о Bundle в Android, и я видел, как люди используют Bundle для передачи значений в новую Activity .
Как это:

 Intent intent = new Intent(this, MyActivity.class); Bundle extras = new Bundle(); extras.putString("EXTRA_USERNAME","my_username"); extras.putString("EXTRA_PASSWORD","my_password"); intent.putExtras(extras); startActivity(intent); 

Здесь у меня есть 2 сомнения.
Почему я должен использовать Bundle если я могу передавать значения в новую Activity , помещая их непосредственно в Intent ?
Каковы преимущества использования Bundle вместо прямого Intent putExtra() ?

4 Solutions collect form web for “Преимущества использования Bundle вместо прямого намерения putExtra () в Android”

Это мало (если есть разница). Код с использованием дополнительного пакета немного тяжелее (он не будет иметь никакого значения в каком-либо практическом приложении) и немного проще в управлении, будучи более общим.

Если однажды вы решите, что – перед отправкой информации внутри намерения – вы хотите сериализовать данные в базу данных – будет немного чище иметь пакет, который вы можете сериализовать, добавить в намерение, а затем подать на PendingBundle – все с одним объектом.

[Обновить]

Прояснение (из-за некоторых других ответов).

Экстра это дополнительный пакет, который каждый Intent может нести (но не обязательно), поэтому нет альтернативы между использованием пакета или его использованием. Вы используете пучок в любом случае.

При первом использовании putExtra mExtras пакет mExtras внутри Intent, и все следующие putExtra делегируются ему. Сам комплект недоступен для вас (это по дизайну, чтобы избежать определенных ошибок).

putExtras не помещает ваш комплект в Intent. Вместо этого он копирует его в текущий пакет намерений (или создает его, как и с putExtra ). Вот почему он немного тяжелее (у вас есть два пучка вместо одного и оплата цены на копирование).

Суть – если вы используете putExtras , вы все равно не сможете получить доступ к реальному пакету внутри намерения. НО – у вас есть копия для всего, что вы можете с ней сделать. Как держать вокруг, чтобы копировать в другое намерение (если вы отправляете много подобных намерений).

Дополнительное преимущество : после ввода данных в Bundle вы можете отправлять одни и те же данные несколькими способами. (Только в случае, необходимо отправить несколько намерений).

Связки – это круто, потому что вы можете более легко изолировать их создание / чтение, тем самым отделяя код обработки пакетов от кода пользовательского интерфейса.

В большинстве случаев это бесполезно, так как вы хотите передать наименьшее возможное количество данных (обычно всего пару строк, идентификатор …)

вы можете направить это, а также это .

вы можете отправить несколько или кучу данных в один комплект и отправить его через Intent. или другой способ – добавить несколько операторов PutExtra ().

И нет никаких важных различий в моих знаниях.

  • onActivityResult (), вызванный преждевременно
  • System.exit (0) не закрывает все мои действия?
  • Закрыть приложение и запустить домашний экран на Android
  • Жизненный цикл Android Fragment над изменениями ориентации
  • Определение, существует ли активность на текущем устройстве?
  • android как создать свою собственную деятельность и расширить ее?
  • Перезагрузка на Android
  • Две активности запуска
  • Как перезапустить Android-активность
  • Как создать прозрачную активность на Android?
  • Android: вызывать активность другого приложения
  • Interesting Posts

    Код цвета кода кодирования xcode / не работает

    Просмотр содержимого архива в Mac OS X

    Показать Загрузка анимации во время загрузки данных в другой stream

    Что касается «main (int argc, char * argv ) ‘

    В bash, как мне избежать восклицательного знака?

    «Онлайновые» (итерационные) алгоритмы для оценки статистической медианы, моды, асимметрии, эксцесса?

    Предотвращение установки обновлений Windows 10 от Windows 7

    Как разрешить анонимному пользователю доступ к какой-либо заданной странице в MVC?

    Как resize многомерного (2D) массива в C #?

    Настройка беспроводного ретранслятора в домашней сети

    Как настроить другой браузер для использования Tor?

    Ресурсы для создания компьютеров

    Как получить информацию об ошибках MySQLi в разных средах

    ПК не загружается с подключенными USB-устройствами

    Возможно ли по умолчанию использовать поле DateTime для GETDATE () с миграциями Entity Framework?

    Давайте будем гением компьютера.