Отправка объектов Parcelable как сериализуемых

Рассматриваемый проект Android уже использует Serializable для передачи информации между внутренними модулями.

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

Мне нужно передать один из этих «внешних» объектов другому модулю, это не Serializable, поэтому я не могу отправить его в обычном режиме. Программист до меня преобразовал все несериализуемые объекты в статические переменные в классе-оболочке, я не уверен, что это хорошая идея, хотя модули должны оставаться активными все время.

Это класс-оболочка Serializable:

private static Road road;
private NavigationStep firstNavigationStep;

/**
 * To send the route information to the App. Here is everything the app needs to display the
 * data to the user.
 * @param road the route the user is to follow
 * @param firstNavigationStep the users location and the current Step.
 */
public CurrentRoad(Road road, NavigationStep firstNavigationStep){
    this.firstNavigationStep = firstNavigationStep;
    this.road     = road;
}

Написание Road как переходного процесса приводит к потере данных, написание целого класса-оболочки для дороги было бы слишком трудоемким делом (он необходим для создания оверлеев, поэтому много геометрии находится внутри и взято из внешней библиотеки, поэтому я могу что-то забыть). Менять весь Project на Parcelable тоже не реально.

Есть ли решение? Действительно ли лучший способ просто сохранить то, что мне нужно, как статическое?


person Raeglan    schedule 20.12.2016    source источник


Ответы (2)


Попробуйте использовать EventBus. Отправить событие Sticky, содержащее ссылку на объект. Оно будет доставлено каждому подписанному объекту, пока вы явно не отмените это событие.

person Alex Shutov    schedule 20.12.2016
comment
В нашей архитектуре уже описана служба сообщений, она использует Serializable. Это менеджер сообщений, написанный кем-то другим в проекте. Я новичок в команде, и проект охватывает более одной компании, поэтому добавить внешнюю библиотеку не так просто. - person Raeglan; 20.12.2016

Возможно, вы можете использовать событие (http://greenrobot.org/eventbus/), чтобы передать объект где вам это нужно.

person Julius    schedule 20.12.2016
comment
В нашей архитектуре уже описана служба сообщений, она использует Serializable. Это менеджер сообщений, написанный кем-то другим в проекте. Я новичок в команде, и проект охватывает более одной компании, поэтому добавить внешнюю библиотеку не так просто. - person Raeglan; 20.12.2016
comment
Хорошо, я не уверен, что понимаю нюансы вашего вопроса, но, возможно, вы можете попытаться сохранить его в экземпляре singleton в своем (возможно, расширенном) классе приложения. Предполагая, что у вас всегда есть доступ к контексту приложения, это позволит вам хранить что-то, что должно жить так же долго, как и ваше приложение. Затем, возможно, намерение или какой-либо другой сигнал для запуска того, что значение из этого класса синглтона должно быть прочитано на принимающей стороне. - person Julius; 20.12.2016