android bundle和intent,Android细节问题 —— 有了Intent,为什么还要有Bundle?

Intent本身就可以传递参数(Intent.putExtra("key", value))为何还要用Bundle呢?

两者比较

Bundle只是一个信息的载体,内部其实就是维护了一个Map。

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是不可替代的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值