微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Parcelable 比 HashMap 的 Serializable 快

如何解决Parcelable 比 HashMap 的 Serializable 快

在 Android 中,Parcelable 应该比 Serializable 快得多。然而 HashMap 不是 Parcelable,如果我们的键/值是原始类型或 Parcelable,我们仍然可以使它成为 Parcelable,如下所示:

class MyParcelableMap() : HashMap<Int,String>(),Parcelable {

    constructor(parcel: Parcel) : this() {
        val keys = parcel.createIntArray() ?: IntArray(0)
        val values = parcel.createStringArray() ?: emptyArray<String>()
        keys.forEachIndexed {i,k ->
            this[k] = values[i]
        }
    }

    override fun writetoParcel(parcel: Parcel,flags: Int) {
        val entries = this.entries
        val keys = entries.map { it.key }.toIntArray()
        val values = entries.map { it.value }.toTypedArray()
        parcel.writeIntArray(keys)
        parcel.writeStringArray(values)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<MyParcelableMap> {
        override fun createFromParcel(parcel: Parcel): MyParcelableMap {
            return MyParcelableMap(parcel)
        }

        override fun newArray(size: Int): Array<MyParcelableMap?> {
            return arrayOfNulls(size)
        }
    }
}

由于我们将手动读取/写入每个条目,我不确定这会比 Serializable 快,假设 Serializable 将仅重建地图而不会一一添加条目。

如果 Parcelable 不是更快,那么这样做没有任何好处,我们可以将 Map<Int,String> 作为 Serializable 传递,不需要额外的代码。所以我想知道在这种情况下是否更快 Parcelable,或者这可能取决于地图大小。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。