2017-02-23 19 views
0

Рассмотрите этот сценарий: Есть два вида действий. Действие. Выполнение сетевого вызова и подсчет количества задач, а действие B - выбор задач из базы данных или из одного и того же сетевого API-вызова, если данные недоступны. В то время как A занят в сетевом вызове, пользователь может перейти к Activity B. Я использую Retrofit2 и Rxjava2.Персистский наблюдаемый объект среди множества видов деятельности

Мой вопрос в том, что действие А выполняет сетевой вызов, а пользователь переходит к Activity B, и по-прежнему выполняется сетевой вызов, я хочу, чтобы объект Observable <> был создан на Activity A, также на Activity B, потому что если я не получайте обратный вызов, тогда другой сетевой вызов для той же задачи будет выполнен на Activity B, что невозможно.

У любого есть идея Как я могу сохранить объект Observable <>, созданный на Activity A, используя этот наблюдаемый объект, я получу обратный вызов для Activity A, а также для Activity B и выполняю некоторые функции.

ответ

0

Мой вопрос, когда активность А делают вызовы сети и пользователь перейти на активности B, и до сих пор сеть вызов работает тогда,

Вы должны отказаться наблюдаемым для того, чтобы отменить сеть вызов. Если вы сохраните сильную ссылку на него, вы пропустите активность за время запуска сетевого вызова. Вы должны разъединить эту логику

Я хочу объект НАБЛЮДАЕМЫХ <> созданный на активность А, а также на активность B , потому что, если я не получаю обратный вызов, то другой сетевой вызов для одной задачи будет осуществляться на деятельность B, что не представляется возможным

Возможно. У вас может быть синглтон или лучше использовать Dagger для этого, который обрабатывает сетевой вызов и выдает результат на BehaviourSubject, на который вы будете подписаться. Хорошая вещь BehaviourSubject заключается в том, что последнее значение всегда будет высылаться новым подписчикам.

1

Кажется, что вам нравится делать работу в фоновом режиме, которая будет доступна для разных частей вашего приложения (Activity), в этом случае вы можете рассмотреть возможность использования Android Service.
Короче создать Service из ActivityA, которые будут вызывать выборку данных, а затем в ActivityB подключиться к этому Service получить Observable с данными, извлекаемых в ActivityA.

Для сохраняющихся данных и избежать 2 вызовов API же, вы можете использовать операторы, такие как cache() что будет MultiCast вашего Observable и кэшировать данные, а затем она может быть доступна для ActivityB, а также.

Другой вариант, как предложено, чтобы провести static ссылку на Observable или ссылки на Application уровне, который будет доступен для всего вашего приложения, но тогда вы должны быть осторожны с утечками, о чем подробно @Blackbelt.

Смежные вопросы