Intent本身就可以传递参数(Intent.putExtra("key", value))为何还要用Bundle呢?
两者比较
- Bundle只是一个信息的载体,内部其实就是维护了一个Map<String,Object>。
- Intent负责Activity之间的交互,内部是持有一个Bundle的。
- putExtra()方法的源码
public Intent putExtra(String name, boolean value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putBoolean(name, value);
return this;
}
- putExtras(Bundle bundle):会将Intent的内部Bundle替换成参数bundle。
应用场景
例1:
从A界面跳转到B界面或者C界面
这样的话 我就需要写2个Intent 如果你还要涉及的传值的话 你的Intent就要写两遍添加值的方法。那么,如果我用1个Bundle,直接先存值,然后再存到Intent中 不就更简洁吗?例2:
现在要把值通过Activity A经过Activity B传给Activity C。
如果用Intent的话,A-B先写一遍,再在B中都取出来 然后在把值塞到Intent中,再跳到C。
如果在A中用了 Bundle 的话,把Bundle传给B,在B中再转传到C,C就可以直接去取了。
bundle使用场景
- 在设备旋转时保存数据
// 自定义View旋转时保存数据
public class CustomView extends View {
@Override
protected Parcelable onSaveInstanceState() {
super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.put...
return bundle;
}
// Activity旋转时保存数据
public class CustomActivity extends Activity {
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.put...
}
- Fragment之间传递数据
比如,某个Fragment中点击按钮弹出一个DialogFragment。
最便捷的方式就是通过Fragment.setArguments(args)传递参数。
所以,Bundle是不可替代的。