は私が観察可能な、次のように作成します。RxAndroidで加入者を停止する方法は?
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();
残念ながら、期待どおりに停止しません。ファイルアイテムは引き続き放出されます。
私の間違いを指摘してください。
UPDATE:
Iのデバッグ行ずつと、観察がfor
ループに陥っていることがわかります。このループでは、再帰的メソッドを呼び出し、サブスクライバをパラメータとして渡します。この方法では、すべてのファイルを検索するために、すべてのAndroidファイルシステム(ルートフォルダから開始)をブラウズし、次にそれらを1つずつ発行します。 (システム全体のファイル数が非常に多いため、この方法を使用します。静的リストには保存しないでください) for
ループに詰まっているので、サブスクリプションオブジェクトは常にnullです。まだ解決策が見つかりません。
Observable.from(fileList)を使用していない理由は何ですか?可能であれば、Observable.createを避けるべきです。 – Jahnold
fileListは、再帰的な方法で提供され、Androidファイルシステム内のすべてのファイルを取得します。それは私たちが開始時に完全なリストを持っていないということです、私は再帰的にデータを放出するために加入者を渡さなければなりません。 –