Saya menggunakan lib reactive-location.
Kasus penggunaan saya adalah saya memiliki aliran objek yang dipancarkan dari sesuatu yang dapat diamati. Barang-barang ini berpotensi dikeluarkan setiap beberapa jam. Segera setelah suatu item dipancarkan, saya ingin mendapatkan lokasi dan menggunakan zipWith(sejauh yang saya mengerti) memancarkan objek yang berisi lokasi tersebut.
Masalahnya adalah: karena objek hanya akan dipancarkan setiap beberapa jam sekali, saya tidak dapat menjaga lokasi tetap panas karena akan menguras baterai.
Jadi saya memerlukan yang berikut: setelah suatu objek dimasukkan ke dalam aliran, berlangganan ke lokasi yang dapat diamati setelah lokasi diperoleh, berhenti berlangganan ke lokasi yang dapat diamati. Hal ini harus dilakukan secara terus menerus.
Sejauh yang saya pahami trafo ini menangani berhenti berlangganan
public <T> Observable.Transformer<T, T> takeNextAndUnsubscribe() {
return new Observable.Transformer<T, T>() {
@Override
public Observable<T> call(Observable<T> tObservable) {
final BehaviorSubject subject = BehaviorSubject.create();
Observable source = tObservable.doOnNext(new Action1<T>() {
@Override
public void call(T t) {
subject.onNext(t);
}
});
return Observable
.merge(source.takeUntil(subject), subject)
.take(1);
}
};
}
Namun bagaimana saya bisa berlangganan lagi setelah objek baru dikirimkan?