Solo observable con múltiples suscriptores

Yo tengo unObservable<<List<Foo>> getFoo() que se crea desde un Servicio de actualización y después de llamar al.getFoo() método, necesito compartirlo con múltiples suscriptores. Llamando al.share() sin embargo, hace que la llamada de red se vuelva a ejecutar. El operador de reproducción tampoco funciona. Sé que una posible solución podría ser.cache(), pero no sé por qué se produce este comportamiento.

// Create an instance of our GitHub API interface.
Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();

// Create a call instance for looking up Retrofit contributors.
Observable<List<Contributor>> testObservable = retrofit
        .create(GitHub.class)
        .contributors("square", "retrofit")
        .share();

Subscription subscription1 = testObservable
       .subscribe(new Subscriber<List<Contributor>>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(List<Contributor> contributors) {
                System.out.println(contributors);
            }
         });

Subscription subscription2 = testObservable
        .subscribe(new Subscriber<List<Contributor>>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(List<Contributor> contributors) {
                System.out.println(contributors + " -> 2");
            }
         });

subscription1.unsubscribe();
subscription2.unsubscribe();

El código anterior puede reproducir el comportamiento antes mencionado. Puede depurarlo y ver que las Listas recibidas pertenecen a una MemoryAddress diferente.

También he visto ConnectableObservables como una posible solución, pero esto requiere que lleve el observable original y llame.connect() cada vez que quiero agregar un nuevo suscriptor.

Este tipo de comportamiento con el.share() funcionaba bien hasta Retrofit 1.9. Dejó de funcionar en Retrofit 2 - beta. Todavía no lo he probado con la versión de lanzamiento de Retrofit 2, que se lanzó hace algunas horas.

EDITAR: 01/02/2017

Para futuros lectores, he escrito un artículoaquí ¡explicando más sobre el caso!

Respuestas a la pregunta(2)

Su respuesta a la pregunta