Что нибудь, например адрес раньше приходил один раз от запроса, теперь приходит переодически во времени, getAddress изменился
Значит есть некий Repository, DataSource, "ВашВариант", который является поставщиком адресса.
Есть набор бизнесс-правил по которым этот самый адресс может измениться.
В момент времени А эти бизнесс-правила предполагают изменение адресса один раз при регистрации пользователя к примеру.
В момент времени Б ТЗ меняется. К примеру появляется UI аля "edit user profile". Соответсвенно меняются бизнесс-правила.
А значит меняется поведение источника данных. Если для источника данных способа взаимодействия мы использовали возврат Single - мы влипли. Т.К. зависимые модули в хооде разработки могли расчитывать, на поведение "1 эммит и terminate сразу за ним".
Если мы вернули Observable - зависимые модули не могли расчитывать на конкретное поведение. А значит мы можем смело заменять Single на любой другой частный случай Observable и абсолютно легально расчитывать на то, что никаких багов это за собой не потянет.
Для каждого запроса держать свой disposable необходимо. Другой вопрос - где его держать.
Лично я предпочитаю разруливать эту логику на уровне интерактора.
К примеру "при поступлении нового запроса на выполнение, существующий процесс должен быть отменен и запущен заново с новыми аргументами". Ну или наоборот. Новый проигнорирован. Или же оба должны выполниться параллельно.
Я видел имплементации, где этим занимается слой интерфейс-адаптеров. Тоже имеет право на жизнь и свои преимущества, хотя мне лично кажется спорным.
Но так или иначе, в условиях RxJava, если есть прослушиваемая операция - должен быть disposable под нее.