Использование протобуферов вместо Parcelables в дополнениях о намерениях Android? - PullRequest
3 голосов
/ 17 мая 2011

Было бы хорошей идеей использовать объекты буфера протокола (сериализованные в байтовые массивы) для передачи в качестве преднамеренного дополнения между действиями Android вместо реализации Parcelable на классических POJO? Как это повлияет на производительность?

Спасибо Markus

1 Ответ

2 голосов
/ 17 мая 2011

Чтобы точно знать, вам нужно будет пройти тест для вашего конкретного случая.

Что нужно помнить о Посылке :

  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().

...