使用协议缓冲区对象(序列化为字节数组)作为Android活动之间的意图附加项而不是在经典POJO上实现Parcelable是不是一个好主意?它会如何影响性能?
由于 马库斯
答案 0 :(得分:2)
要确定您必须为您的特定情况进行测试。
关于Parcel的注意事项:
您可能知道,这是一个手动过程:您必须遍历对象树并调用Parcel的各种序列化方法,例如writeFloatArray(..)
。没有魔法,它就像它的低级一样。
Parcel.java是本机实现的包装器,所以它应该已经非常优化了:http://www.google.com/codesearch/p?hl=en#uX1GffpyOZk/libs/binder/Parcel.cpp&q=Parcel.cpp%20package:android&sa=N&cd=1&ct=rc
不要使用Binder,因为它会创建代理(如果是跨进程)。
可能最重要的是:使用setDataCapacity(int size)
正确调整初始缓冲区的大小。这样就不需要增长内部数组(=内存分配+复制)。
如果多次使用Parcel,请使用recycle()
将其返回池中。