Tôi phải cung cấp bộ nhớ cache ngắn để có kết quả quan sát được.Bộ đệm không đồng bộ RxJava: cách thích hợp để vứt bỏ replay(). AutoConnect() Quan sát
Nhìn vào các tùy chọn và tôi thấy như sau:
bộ nhớ cache
replay(1).refCount()
và khi dữ liệu đã sẵn sàng, bộ nhớ cache giá trị thực tế. Truy xuất bộ nhớ cache sẽ kiểm tra dữ liệu thực tế và thực hiệnObservable.just
hoặc trả về đang chờ xử lý hoặc có thể bắt đầu yêu cầu mới.bộ nhớ cache
replay(1).autoConnect(1)
và luôn luôn trả rằng
sau có vẻ thẳng về phía trước, nhưng nó có một ngoại, làm thế nào để xử lý một cách chính xác quan sát khi bộ nhớ cache đã hết hiệu lực.
Có một chữ ký:
public Observable<T> autoConnect(int numberOfSubscribers, Consumer<? super Disposable> connection)
nhưng khó có thể nói thế nào tôi có thể theo dõi đăng ký lưu hành và có hoặc không xử lý sẽ duyên dáng.
trước đây sẽ xử lý việc phân bổ tài nguyên, nhưng bạn phải tạo ra logic phức tạp hơn.
toán tử bộ nhớ cache không phát ra cho đến khi trình tự hoàn tất. Ngoài ra tôi nghĩ rằng bạn có cùng một vấn đề, bạn phải an toàn vứt bỏ nó biết biết số đăng ký hoạt động. – user2649908
Bộ nhớ cache phát ra chúng khi chúng đến - xem [sơ đồ đá cẩm thạch] (http://reactivex.io/RxJava/javadoc/rx/Observable.html#cache()), nhưng nó sẽ đăng ký nguồn có thể quan sát ngay lập tức và sẽ không hủy đăng ký khi bạn có 0 người đăng ký, vì vậy không phù hợp với Đài quan sát không phải 1 người. Nhưng bạn * có thể * chỉ để nó thu gom rác. –
Tôi đã thử nghiệm mới nhất 1.x, 1.2.7, đây là những gì tôi thấy: trông giống như bộ nhớ cache bắt đầu phát ra các mục ngay lập tức, đây không phải là vấn đề nữa. Tôi có thể cung cấp gợi ý kích thước, vẫn không thể hủy đăng ký từ thượng lưu, vì vậy không phù hợp ở tất cả cho nguồn vô hạn. Nó thu thập rác một cách chính xác, nó hỗ trợ đăng ký đồng thời hoặc thưa thớt, nó khá nhiều bao gồm nhu cầu của tôi – user2649908