2015-09-11 13 views
10

X sayısı emisyonunu önleyebilen ancak aynı zamanda belirli bir zaman aralığından sonra (örneğin 1 dakika) sona eren bir cache() operatörünün olup olmadığını merak ediyordum. Ben RxJava- Önbellek() replay() ile aynı mı?

Observable<ImmutableList<MyType>> cachedList = otherObservable 
    .cache(1, 1, TimeUnit.MINUTES); 

Bu bir öğe önbelleğe ama sona ve bir dakika sonra önbelleği temizlemek istiyoruz ... şey gibi arıyordu.

Bazı araştırmalar yaptım ve replay operatörünü buldum. Bu ihtiyacı yerine getirmiş gibi görünüyordu ama bazı sorularım var. Niçin sıcak ve bağlı olması gerekiyor? Bu, cache() operatöründen farklı mı? cache()'un bir konuyu taklit ettiğini biliyorum, ancak bağlanmayı gerektirmiyor. Farklı kullanım durumları için

cevap

22

cache ve replay kastedilmektedir. Önbellek, genellikle uzun vadeli tekrarlar için kullanılan otomatik bağlanan bir tekrar-her şey konteynırdır. Yeniden oynatma daha fazla parametrelendirmeye sahip olabilir ve sınırlı zaman/boyut tekrarlarını yapabilir, ancak geliştiricinin ne zaman başlayacağını belirtmesini gerektirir. autoConnect() işleci, ConnectableObservable örneklerini, abone abone olduktan sonra kaynağa bağlanan düz Observable şeklinde döndürmenizi sağlar. Bu şekilde, olabilir bir sınırlanmış ve otomatik bağlantı tekrar (RxJava gerektirir 1.0.14+): https: Muhtemelen belirtmeliyim

source.replay(1, TimeUnit.SECONDS).autoConnect().subscribe(...); 
+0

'autoconnect' standart API haline şimdi daha olasıdır –

+2

deneysel: //github.com/ReactiveX/RxJava/pull/3391 – akarnokd

İlgili konular