在Android意图附加中使用protobuffers而不是Parcelables?

时间:2011-05-17 08:46:43

标签: android protocol-buffers parcelable

使用协议缓冲区对象(序列化为字节数组)作为Android活动之间的意图附加项而不是在经典POJO上实现Parcelable是不是一个好主意?它会如何影响性能?

由于 马库斯

1 个答案:

答案 0 :(得分:2)

要确定您必须为您的特定情况进行测试。

关于Parcel的注意事项:

  1. 您可能知道,这是一个手动过程:您必须遍历对象树并调用Parcel的各种序列化方法,例如writeFloatArray(..)。没有魔法,它就像它的低级一样。

  2. 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

  3. 不要使用Binder,因为它会创建代理(如果是跨进程)。

  4. 可能最重要的是:使用setDataCapacity(int size)正确调整初始缓冲区的大小。这样就不需要增长内部数组(=内存分配+复制)。

  5. 如果多次使用Parcel,请使用recycle()将其返回池中。