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

В моем приложении Android я всегда использую функцию прямого putExtra() класса 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()?

Ответ 1

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

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

[обновление]

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

вы можете ссылаться на а также .

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

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