RxJava, ¿Qué pasó si no llamo a disponer?

Mi aplicación de Android debe ser compatible para cargar un file grande, pero no quiero que el usuario espere hasta que se complete la carga.

Por lo general, cuando uso Observable, llamo a dispose () para ello cuando se destruye la vista.

Pero al cargar el estuche, no puedo deshacerme de él en ningún caso hasta que termine.

Así que estaba pensando en intentar que me gustara esto,

private val compositeDisposable: CompositeDisposable = CompositeDisposable() fun upload() { val disposable = Observable.just(true).delay(20, TimeUnit.SECONDS).subscribe({ Log.d("=>", "Upload finished") disposeUploader() }) compositeDisposable.add(disposable) } fun disposeUploader() { compositeDisposable.clear() compositeDisposable.dispose() } 

Pero el problema es que se puede llamar a upload () varias veces, por lo que el primer cargador eliminará todas las demás llamadas de procesamiento.

¿Qué pasó si no llamo a disponer? o hay alguna manera de deshacerse de sí mismo cuando se completa?

La idea de disponer un Observable tiene dos propósitos:

1) Evite memory leaks: desmonte las references de vista que pueda tener el module de request en curso.
2) Liberar resources: deje de realizar tareas en segundo plano para liberar resources innecesarios, cuando el usuario salga de su actividad, por ejemplo, una request / procesamiento puede que ya no sea relevante, por lo que no tiene sentido mantenerlo en ejecución.

En su caso, desea que su tarea en segundo plano (cargar el file) se reanude, evitando (2), mientras se despega de su vista (1).

Su solución de eliminación después de un período de time pasa por alto el punto ya que Observable se dispose al finalizar. además, no puede suponer una duración específica para la carga (como máximo es el valor de time de espera).

La solución con RxJava es la multidifusión de su Observable utilizando un operador como publish y share , en su caso:

 val multicastedObservable = uploadObservable.publish() .autoConnect() .subscriber(//your view related subscriber); 

De esta forma, uploadObservable comenzará a ejecutarse al principio, pero no se detendrá cuando se llame a dispose , sino que se desconectará la reference para ver.


Habiendo dicho todo eso, vale la pena señalar que su escenario de carga no se puede hacer de manera confiable sin service de primer plano en Android.

  • ¿Cómo hacer un grupo? ¿Por qué coleccionar usando RxJava y Kotlin?
  • EXCEPCIÓN FATAL: RxCachedThreadScheduler-1 cuando el gatillo se deshace. ¿Por qué?
  • ¿Cómo puedo agregar de manera condicional una operación asincrónica en medio de una transmisión de RxJava?
  • Transformaciones de datos con RxJava en Kotlin
  • Reactor Spring 5 - Emisión de elementos cada 1 segundo
  • Argumento de tipo explícito Kotlin y RxJava
  • ¿Cuándo no usar el Observable de RxJava?
  • Cómo get el valor del ObservableField en android
  • ¿Alguna diferencia entre "Subject.asObservable ()" y el tema en sí "Subject"?
  • Pruebas unitarias Rxjava observables que tienen un retraso
  • Kotlin y RxJava: ¿por qué mi Single.zip () no se está comstackndo?