Android面試專題系列(六):Activity中爲什麼要用bundle來傳遞數據,而不用HashMap來代替?

不詩意的女程序媛不是好廚師~
轉載請註明出處,From李詩雨—https://blog.csdn.net/cjm2484836553/article/details/105152708

在這裏插入圖片描述

面試官:“你一定看過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性能要高。

關於第二點,我們在源碼中可以看到:
在這裏插入圖片描述
在這裏插入圖片描述

積累點滴,做好自己

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章