Tôi cảm thấy như ai đó đã thử điều này, nhưng tôi không thể tìm ra một cách tốt đẹp để làm điều gì đó nếu có thể quan sát được lâu.Làm cách nào để hiển thị spinner nếu RxJava có thể quan sát được lâu?
Đây là luồng tôi muốn.
Start a search.
If the search takes longer than some time,
show a spinner or show progress bar.
When finished do subscription action and hide spinner/progress bar.
Gần nhất tôi có thể nghĩ là giống như một Zip
manager.search(searchTerm)
.zip(Observable.Timer(1, TimeUnit.SECONDS))
.subscribe(
// if the search is non null then we are good
// if the long time is non 0 we need to show spinner
);
Có điều gì tốt hơn để làm gì? Tôi đã cố gắng cả ngày và không thành công. Trong một thế giới hoàn hảo Tôi cảm thấy như tôi muốn một cái gì đó giống như
manager.search(searchTerm)
.timeout(i -> /* do timeout stuff */, 1, TimeUnit.SECONDS)
.subscribe(item -> /* do search result stuff */);
Từ tài liệu 'BlockingObservable':" Nhưng nói chung là không phù hợp cho các ứng dụng sản xuất (nếu bạn nghĩ rằng bạn cần sử dụng BlockingObservable thì đây thường là dấu hiệu cho thấy bạn nên suy nghĩ lại về thiết kế của mình). " Vì vậy, khi sử dụng chặn quan sát thích hợp và khi không? – Than
Tôi sẽ nói rằng nó là ok để sử dụng BlockingObservable trong một số trường hợp, khi nó thực sự cải thiện khả năng đọc mã của bạn. – scana
Tôi đã sử dụng 'BlockingObservable' ở đây cho mục đích trình diễn để ứng dụng không thoát trước khi nhìn thấy tất cả các bản in. Trong sản xuất, bạn chỉ cần không gọi 'toBlocking' và đó là nó. – akarnokd