配列やIterable
などの有限のものをObservable
に変換する方法の例がたくさんありましたが、実際に効果的なものからObservable
を作成する方法を理解しているかどうかはわかりませんイベント受信者のように無制限です。私はRxJava2のドキュメントを勉強し、AndroidのLocationListener
を例にしてこれを考え出しました。Observablesでイベントリスナーをラップする
これを行うには、より簡単で正しい方法がありますか?私は "RxBus"のコンセプトを認識していますが、これは古いイベントバスのパラダイムに執着する方法のようです。
final Observable<Location> locationObservable = Observable.create(new ObservableOnSubscribe<Location>() {
final LocationManager mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
@Override
public void subscribe(final ObservableEmitter<Location> emitter) throws Exception {
final LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(final Location location) {
emitter.onNext(location);
}
@Override
public void onStatusChanged(final String s, final int i, final Bundle bundle) {
// TODO ???
}
@Override
public void onProviderEnabled(final String s) {
// TODO ???
}
@Override
public void onProviderDisabled(final String s) {
// TODO ???
}
};
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
emitter.setCancellable(new Cancellable() {
@Override
public void cancel() throws Exception {
mLocationManager.removeUpdates(listener);
}
});
emitter.setDisposable(new Disposable() {
private AtomicBoolean mDisposed;
@Override
public void dispose() {
if(mDisposed.compareAndSet(false, true)) {
mLocationManager.removeUpdates(listener);
}
}
@Override
public boolean isDisposed() {
return mDisposed.get();
}
});
}
});