在 Android 中将大图标写入 parcelable
Writing large Icon to a parcelable in Android
我正在将对象写入具有图标字段的 Parcel。
在writeToParcel
方法下断点时,观察到写图标前的包裹大小是22456
字节。
Icon
是数据类型,下面是 toString
在调试器中给出的内容:
Icon(typ=DATA len=31189)
表示数据长度为 31189 bytes
,通过在 class.
中调用 getDataBytes
验证了这一点
但是,将这个图标写到包裹上后,包裹大小变成了22572
字节,比原来多了116
字节。
看来在写图标的时候幕后发生了一些事情。我无法通过查看 Icon class.
的源代码来得出结论
有人可以解释一下这是怎么回事吗?我在 class 中看到了一些关于 ashmen 内存的参考资料,但我不太确定那是什么意思以及它是如何加起来的。
编辑:对于预览为 Icon(typ=DATA len=11129)
的另一个对象,包裹大小增加了相同的 11129
字节。
编辑 2:
original size: Icon(typ=DATA len=4864) , bytes taken in parcel: 4888
original size: Icon(typ=DATA len=4314) , bytes taken in parcel: 4340
original size: Icon(typ=DATA len=4314) , bytes taken in parcel: 4340
original size: Icon(typ=DATA len=31189) , bytes taken in parcel: 48
original size: Icon(typ=DATA len=11129) , bytes taken in parcel: 11156
original size: Icon(typ=DATA len=58126) , bytes taken in parcel: 48
original size: Icon(typ=DATA len=11705) , bytes taken in parcel: 11732
original size: Icon(typ=DATA len=7713) , bytes taken in parcel: 7740
original size: Icon(typ=DATA len=7713) , bytes taken in parcel: 7740
深入研究本机代码后得到了答案。
如我们所见here,包裹的就地 blob 限制为 16KB。如果大于该值,则会将其复制到共享的 ashmem 区域。
我正在将对象写入具有图标字段的 Parcel。
在writeToParcel
方法下断点时,观察到写图标前的包裹大小是22456
字节。
Icon
是数据类型,下面是 toString
在调试器中给出的内容:
Icon(typ=DATA len=31189)
表示数据长度为 31189 bytes
,通过在 class.
getDataBytes
验证了这一点
但是,将这个图标写到包裹上后,包裹大小变成了22572
字节,比原来多了116
字节。
看来在写图标的时候幕后发生了一些事情。我无法通过查看 Icon class.
的源代码来得出结论有人可以解释一下这是怎么回事吗?我在 class 中看到了一些关于 ashmen 内存的参考资料,但我不太确定那是什么意思以及它是如何加起来的。
编辑:对于预览为 Icon(typ=DATA len=11129)
的另一个对象,包裹大小增加了相同的 11129
字节。
编辑 2:
original size: Icon(typ=DATA len=4864) , bytes taken in parcel: 4888
original size: Icon(typ=DATA len=4314) , bytes taken in parcel: 4340
original size: Icon(typ=DATA len=4314) , bytes taken in parcel: 4340
original size: Icon(typ=DATA len=31189) , bytes taken in parcel: 48
original size: Icon(typ=DATA len=11129) , bytes taken in parcel: 11156
original size: Icon(typ=DATA len=58126) , bytes taken in parcel: 48
original size: Icon(typ=DATA len=11705) , bytes taken in parcel: 11732
original size: Icon(typ=DATA len=7713) , bytes taken in parcel: 7740
original size: Icon(typ=DATA len=7713) , bytes taken in parcel: 7740
深入研究本机代码后得到了答案。
如我们所见here,包裹的就地 blob 限制为 16KB。如果大于该值,则会将其复制到共享的 ashmem 区域。