随笔6

  • Bundle 这是组件中相互传递数据的重要工具, 它是一个类似于 Map 的集合, 存放<key, value>值,  其实Bundle 本身就是一个对象适配器, 适配的对象是Map<String,Object>对象(实现类为HashMap<String,Object>).
  • 我发现 Bundle 有Object get(String) 方法, 却没有 put(Object) 方法, 如果要传自定义类对象, 那这个就麻烦了.

 

     其实, 我们很多时候不必要new 一个Bundle 对象, 可以直接调用 intent.putExtra() 方法来解决, 注意是Extra 不是 Extras. 就算我们不new 一个Bundle 对象, 当我们调用 intent.putExtra() 方法, Intent 对象会检查内部的 Bundle对象是否为null, 是的话, 就new 一个Bundle对象, 引用该对象.

      直接的调用intent.putExtra(), 其内部的实现就要比 "外部new一个Bundle 对象再放进去" 多了很多操作, 如判断内部Bundle 对象是否为null, 参数的类型等等. 所以性能应该是比后者差一些的, 但是这些操作不是元数据级的, 这些性能的差距无关痛痒. 关键看自己的需要, 哪个方便就要哪个.

      第一种写法, 需要明确数据的类型, 并且只传一个两个数据的话, 代码不够第二种简洁, 但是有性能上的优势.

      第二种写法, 就调用一个方法, 代码简洁.

 

  •        我们放进了数据, 这些数据需要读出来才有实际意义.

 

      如果你前面没有传入数据 或 调用 intent.putExtras(bundle) 方法, 那 this.getIntent().getExtras() 返回的结果是 null, 下面的操作就会存在空指针异常了. 用下面的代码就不会出现空指针异常了.

      跟上面的调用 intent.putExtra() 方法一样, Intent 对象会检查内部的 Bundle对象是否为null, 是的话, 就new 一个Bundle对象, 引用该对象. 所以 intent.get*Extra() 方法不会存在空指针问题, 但是由于内部操作增多了, 性能稍稍差一点, 还是上面那句话, "这些操作不是元数据级的, 这些性能的差距无关痛痒".

      currentIntent.getDoubleExtra("height",0d); //第二个参数是一个默认值, 当height 参数不能顺利获取(如null或者类型不匹配等), 就返回这个默认值.

      第一种写法, 由于获取的 Bundle 对象有可能为null, 所以存在空指针异常的风险, 但是有性能上的优势

      第二种写法, 不存在空指针的异常, 并且还能设置默认值, 比较灵活.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值