Android面试专题系列(六):Activity中为什么要用bundle来传递数据,而不用HashMap来代替?
短信预约 -IT技能 免费直播动态提醒
不诗意的女程序媛不是好厨师~
转载请注明出处,From李诗雨—https://blog.csdn.net/cjm2484836553/article/details/105152708
面试官:“你一定看过
Activity
的onCreate()
方法吧,为什么它要用bundle来传递数据,而不用HashMap
来代替呢?”
这个问题就要我们来看看源码了,我们点进去
Bundle
来一探究竟:我们来一下存储数据的方法
putByte()
, 发现它调用的是super.putByte()
,我们继续跟进:我们发现它调用的是
mMap
的put()
方法。而且,我们环顾四周,他们都是调用的mMap
的put()
方法。
那不经让我们想到 关键点 就在这个
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性能要高。关于第二点,我们在源码中可以看到:
积累点滴,做好自己
作者:李诗雨
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341