При использовании объекта Intent мы можем напрямую использовать различные типы данных, используя putExtra(). Мы также можем поместить эти дополнительные данные в объект Bundle и добавить его в Intent. Итак, зачем нам Bundle, если мы можем сделать это напрямую с помощью Intent?
Соотношение интенции и связности
Ответ 1
Иногда вам нужно передать только few variables или values в другой Activity, но что, если у вас есть bunch of variable or values, который вам нужно передать в различные Activities. В этом случае вы можете использовать Bundle и с легкостью передать Bundle на требуемый Activity. Вместо передачи каждой переменной каждый раз.
Ответ 2
Как вы можете видеть, Intent внутренне сохраняет его в Bundle.
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}
Ответ 3
Предположим, вам нужно передать Bundle от одного Activity к другому. Поэтому Intent позволяет добавлять Bundle в качестве дополнительных полей.
EDIT. Например, если вы хотите передать строку из базы данных вместе с некоторыми другими данными, очень удобно поместить эту строку в Bundle и добавить этот Bundle в Intent в качестве дополнительного поля.
Ответ 4
Я предполагаю, что значение @Lalit означает, что ваша деятельность всегда передает одни и те же переменные в разных целях, вы можете сохранить их все в одном Bundle в своем классе и просто использовать intent.putExtras(mBundle) всякий раз, когда вам нужен тот же набор параметры.
Это упростит изменение кода, если один из параметров устареет в вашем коде, например. Как:
public class MyActivity {
private Bundle mBundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
mBundle = new Bundle();
mBundle.putString("parameter1", value1);
mBundle.putString("parameter2", value2);
}
private void openFirstActivity() {
Intent intent = new Intent(this, FirstActivity.class);
intent.putExtras(mBundle);
startActivity(intent);
}
private void openSecondActivity() {
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtras(mBundle);
startActivity(intent);
}
}
OBS: Как уже говорилось, Intent хранит параметры во внутреннем Bundle, и стоит отметить, что при вызове putExtras внутренний набор Intent не указывает на тот же объект, но вместо этого создает копию всех переменных, используя простой for, как это:
for (int i=0; i<array.mSize; i++) {
put(array.keyAt(i), array.valueAt(i));
}