Exp*_* be 6 android kotlin rx-java
我的Android应用程序需要支持上传大文件,但是我不希望用户等到上传完成。
通常,当我使用Observable时,在视图被破坏时会为其调用dispose()。
但是在上载的情况下,我无法在完成之前将其丢弃。
所以我想尝试这样
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()
}
Run Code Online (Sandbox Code Playgroud)
但是问题是upload()可能被多次调用,因此第一个上载程序将处理所有其他处理调用。
如果不打电话给我怎么办?还是在完成时有任何处置方式?
部署a的想法有Observable两个目的:
1)避免内存泄漏-分离正在进行的请求模块可能保存的视图引用。
2)释放资源-停止正在进行的后台任务以释放不需要的资源,例如,当用户退出活动时,请求/处理可能不再重要,因此没有必要继续运行。
在您的情况下,您希望后台任务(上传文件)继续执行,避免(2),同时将视图从中分离出来(1)。
你的一段时间后处置解决方案不得要领如Observable将dispose在完成自身。此外,您不能假设上传的持续时间(最多是超时值)。
RxJava的解决方案是在您的情况下Observable像publish和一样多播您的使用运算符share:
val multicastedObservable = uploadObservable.publish()
.autoConnect()
.subscriber(//your view related subscriber);
Run Code Online (Sandbox Code Playgroud)
这样,uploadObservable将首先开始执行,subscribe但在dispose调用时不会停止,而是将引用分离到视图。
说了这么多,值得注意的是,如果没有Android中的前台服务,就无法可靠地完成您的上传方案。
| 归档时间: |
|
| 查看次数: |
2719 次 |
| 最近记录: |