我们想知道当Bundle
使用可序列化或可分割的对象时,编组何时实际发生?一旦你把它放在捆绑中?由于bundle主要用于简单地在两个屏幕之间传递数据(我们在这里甚至不讨论IPC!),编组对象似乎没什么意义,因为它始终保留在内存中,没有?
我们是否正确地假设只有在
的情况下进行编组(无论是Java序列化还是Android分区)我见过Android框架工程师(我相信是Dianne Hackborn)说应该使用Parcelable
代替Serializable
,因为前者要快得多。多快了?如果对象在大多数情况下都没有被编组,那么这是否会产生影响(假设我们对此的假设是对的)?
答案 0 :(得分:6)
我想我已经明白了。我基本上花了整整一天和今天的大部分时间通过Android Parcel
和Bundle
源代码进行调试,以下是它的工作原理:
HashMap
的包装器,但它支持包裹(即编组)内部地图及其内容所以一般来说: NO ,只是将值放入Bundle中就不会对值进行分区。相反,当将Bundle传递给另一个组件(活动或服务;为什么Android会这样做,我不知道,因为技术上没有IPC发生这种情况时),或者当它必须被分割时,会发生parcelling。
答案 1 :(得分:0)
我认为它马上发生了。而且我认为性能提升是因为可序列化的所需反射工作。我认为它与可序列化和可外部化之间的性能差异相同。