- 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, 所以存在空指针异常的风险, 但是有性能上的优势
第二种写法, 不存在空指针的异常, 并且还能设置默认值, 比较灵活.