Преимущества использования 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().
И нет такого важного различия в моих знаниях.