【发布时间】:2016-11-24 09:28:34
【问题描述】:
我像这样创建一个 Observable:
public Observable<FileObjectModel> getAllFiles() {
return Observable.create(new Observable.OnSubscribe<FileObjectModel>() {
@Override
public void call(Subscriber<? super FileObjectModel> subscriber) {
//fileList is a huge list.
for(int i = 1 ; i < fileList.size(); i ++){
...
subscriber.onNext(fileItem);
}
}
});
}
然后像这样订阅:
subscription = reposistory.getAllFiles()
.compose(scanInject())
.subscribe(...);
当用户点击按钮停止时,我想取消订阅,所以我打电话
subscription.unsubscribe();
不幸的是,它并没有按预期停止。文件项继续发出。
请帮忙指出我的错误。
更新:
我逐行调试,发现 observable 卡在 for 循环中。在这个循环中,我调用一个递归方法并将订阅者作为参数传递。该方法将浏览所有 Android 文件系统(从根文件夹开始)以查找所有文件,然后将它们一一发出。 (我使用这种方式是因为整个系统上的文件数量很大,不应该保存在任何静态列表中。)
由于我们被困在for 循环中,订阅对象始终为空。仍然没有找到任何解决方案。
【问题讨论】:
-
有什么理由不使用
Observable.from(fileList)?传统观点是你应该尽可能避免Observable.create,因为它很容易出错 -
fileList 是通过递归方法提供的,用于获取 Android 文件系统中的所有文件。这意味着我们在开始时没有完整的列表,我必须通过递归方法传递订阅者来发出数据。
标签: rx-java reactive-programming rx-android