Android面试专题系列(六):Activity中为什么要用bundle来传递数据,而不用HashMap来代替?

1,133 阅读1分钟

不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨—blog.csdn.net/cjm24848365…

在这里插入图片描述

面试官:"你一定看过ActivityonCreate()方法吧,为什么它要用bundle来传递数据,而不用HashMap来代替呢?"

这个问题就要我们来看看源码了,我们点进去Bundle来一探究竟:

在这里插入图片描述
我们来一下存储数据的方法putByte(), 发现它调用的是super.putByte(),我们继续跟进:
在这里插入图片描述

我们发现它调用的是mMapput()方法。而且,我们环顾四周,他们都是调用的mMapput()方法。

那不经让我们想到 关键点 就在这个mMap了,它到底是个什么东西!好激动呀,继续看:

在这里插入图片描述

呦西!到这里我们明白了!原来mMap就是ArrayMap啊。那面试官其实不就是想问“为什么用ArrayMap来传递数据而不用HashMap呢?”

那接下来我们的任务不就要比较ArrayMap与HashMap了吗?→即ArrayMap的优势在哪?

嘻嘻,答案如下:

  • 1.ArrayMap适合于小数据量操作,如果在数据量比较大的情况下,它的性能将退化。HashMap内部则是数组+链表结构,所以在数据量较少的时候,HashMap的Entry Array比ArrayMap占用更多的内存。而在Activity中我们使用Bundle的场景大多数为小数据量。所以使用ArrayMap实现更合适。
  • 2.Android中如果使用Intent来携带数据的话,需要数据是基本类型或者是可序列化类型,Bundle使用Parcelable进行序列化,而HashMap则是使用Serializable进行序列化。在Android中Parcelable比Serializable性能要高。

关于第二点,我们在源码中可以看到:

在这里插入图片描述
在这里插入图片描述

积累点滴,做好自己