io.reactivex.Observable.doOnDispose()方法的使用及代码示例

x33g5p2x  于2022-01-25 转载在 其他  
字(8.6k)|赞(0)|评价(0)|浏览(207)

本文整理了Java中io.reactivex.Observable.doOnDispose()方法的一些代码示例,展示了Observable.doOnDispose()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Observable.doOnDispose()方法的具体详情如下:
包路径:io.reactivex.Observable
类名称:Observable
方法名:doOnDispose

Observable.doOnDispose介绍

[英]Calls the dispose Action if the downstream disposes the sequence.

The action is shared between subscriptions and thus may be called concurrently from multiple threads; the action must be thread safe.

If the action throws a runtime exception, that exception is rethrown by the dispose() call, sometimes as a CompositeException if there were multiple exceptions along the way.

Scheduler: doOnDispose does not operate by default on a particular Scheduler.
[中]如果下游处理序列,则调用dispose操作。
该操作在订阅之间共享,因此可以从多个线程同时调用;操作必须是线程安全的。
如果该操作引发运行时异常,则该异常将由dispose()调用重新引发,如果在此过程中出现多个异常,有时会作为CompositeException。
调度器:默认情况下,doOnDispose不会在特定的调度器上运行。

代码示例

代码示例来源:origin: ReactiveX/RxJava

  1. @Override
  2. public ObservableSource<Integer> apply(Integer v) throws Exception {
  3. return Observable.just(v).doOnDispose(new Action() {
  4. @Override
  5. public void run() throws Exception {
  6. counter.getAndIncrement();
  7. }
  8. });
  9. }
  10. })

代码示例来源:origin: ReactiveX/RxJava

  1. @Test(expected = NullPointerException.class)
  2. public void doOnDisposeNull() {
  3. just1.doOnDispose(null);
  4. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void testUnsubscribeSource() throws Exception {
  3. Action unsubscribe = mock(Action.class);
  4. Observable<Integer> o = Observable.just(1).doOnDispose(unsubscribe).cache();
  5. o.subscribe();
  6. o.subscribe();
  7. o.subscribe();
  8. verify(unsubscribe, never()).run();
  9. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void testUnsubscribeSource() throws Exception {
  3. Action unsubscribe = mock(Action.class);
  4. Observable<Integer> o = Observable.just(1).doOnDispose(unsubscribe).replay().autoConnect();
  5. o.subscribe();
  6. o.subscribe();
  7. o.subscribe();
  8. verify(unsubscribe, never()).run();
  9. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Override
  2. public void onNext(Integer t) {
  3. if (valueCount() == 2) {
  4. source.doOnDispose(new Action() {
  5. @Override
  6. public void run() {
  7. child2Unsubscribed.set(true);
  8. }
  9. }).take(5).subscribe(to2);
  10. }
  11. super.onNext(t);
  12. }
  13. };

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void testUnsubscribesFromUpstream() {
  3. final AtomicBoolean unsubscribed = new AtomicBoolean(false);
  4. Action unsubscribeAction = new Action() {
  5. @Override
  6. public void run() {
  7. unsubscribed.set(true);
  8. }
  9. };
  10. Observable.just(1)
  11. .concatWith(Observable.<Integer>never())
  12. .doOnDispose(unsubscribeAction)
  13. .takeLast(1)
  14. .subscribe()
  15. .dispose();
  16. assertTrue(unsubscribed.get());
  17. }

代码示例来源:origin: ReactiveX/RxJava

  1. @SuppressWarnings("unchecked")
  2. @Test
  3. public void noCancelPreviousIterable() {
  4. final AtomicInteger counter = new AtomicInteger();
  5. Observable<Integer> source = Observable.just(1).doOnDispose(new Action() {
  6. @Override
  7. public void run() throws Exception {
  8. counter.getAndIncrement();
  9. }
  10. });
  11. Observable.concat(Arrays.asList(source, source, source, source, source))
  12. .test()
  13. .assertResult(1, 1, 1, 1, 1);
  14. assertEquals(0, counter.get());
  15. }
  16. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void noCancelPreviousRepeat() {
  3. final AtomicInteger counter = new AtomicInteger();
  4. Observable<Integer> source = Observable.just(1).doOnDispose(new Action() {
  5. @Override
  6. public void run() throws Exception {
  7. counter.getAndIncrement();
  8. }
  9. });
  10. source.repeat(5)
  11. .test()
  12. .assertResult(1, 1, 1, 1, 1);
  13. assertEquals(0, counter.get());
  14. }

代码示例来源:origin: ReactiveX/RxJava

  1. @SuppressWarnings("unchecked")
  2. @Test
  3. public void noCancelPreviousArray() {
  4. final AtomicInteger counter = new AtomicInteger();
  5. Observable<Integer> source = Observable.just(1).doOnDispose(new Action() {
  6. @Override
  7. public void run() throws Exception {
  8. counter.getAndIncrement();
  9. }
  10. });
  11. Observable.concatArray(source, source, source, source, source)
  12. .test()
  13. .assertResult(1, 1, 1, 1, 1);
  14. assertEquals(0, counter.get());
  15. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void noCancelPreviousRepeatUntil() {
  3. final AtomicInteger counter = new AtomicInteger();
  4. Observable<Integer> source = Observable.just(1).doOnDispose(new Action() {
  5. @Override
  6. public void run() throws Exception {
  7. counter.getAndIncrement();
  8. }
  9. });
  10. final AtomicInteger times = new AtomicInteger();
  11. source.repeatUntil(new BooleanSupplier() {
  12. @Override
  13. public boolean getAsBoolean() throws Exception {
  14. return times.getAndIncrement() == 4;
  15. }
  16. })
  17. .test()
  18. .assertResult(1, 1, 1, 1, 1);
  19. assertEquals(0, counter.get());
  20. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void testUnsubscribesFromUpstreamObservable() {
  3. final AtomicBoolean unsub = new AtomicBoolean();
  4. Observable.range(1, 10).concatWith(Observable.<Integer>never())
  5. .doOnDispose(new Action() {
  6. @Override
  7. public void run() {
  8. unsub.set(true);
  9. }})
  10. .ignoreElements()
  11. .toObservable()
  12. .subscribe()
  13. .dispose();
  14. assertTrue(unsub.get());
  15. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void testUnsubscribesFromUpstream() {
  3. final AtomicBoolean unsub = new AtomicBoolean();
  4. Observable.range(1, 10).concatWith(Observable.<Integer>never())
  5. .doOnDispose(new Action() {
  6. @Override
  7. public void run() {
  8. unsub.set(true);
  9. }})
  10. .ignoreElements()
  11. .subscribe()
  12. .dispose();
  13. assertTrue(unsub.get());
  14. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void take() throws Exception {
  3. Action onCancel = mock(Action.class);
  4. Observable.range(1, 5)
  5. .doOnDispose(onCancel)
  6. .throttleLatest(1, TimeUnit.MINUTES)
  7. .take(1)
  8. .test()
  9. .assertResult(1);
  10. verify(onCancel).run();
  11. }

代码示例来源:origin: ReactiveX/RxJava

  1. @SuppressWarnings("unchecked")
  2. @Test
  3. public void noCompletionCancelSkip() {
  4. final AtomicInteger counter = new AtomicInteger();
  5. Observable.<Integer>empty()
  6. .doOnDispose(new Action() {
  7. @Override
  8. public void run() throws Exception {
  9. counter.getAndIncrement();
  10. }
  11. })
  12. .buffer(5, 10, TimeUnit.SECONDS)
  13. .test()
  14. .awaitDone(5, TimeUnit.SECONDS)
  15. .assertResult(Collections.<Integer>emptyList());
  16. assertEquals(0, counter.get());
  17. }

代码示例来源:origin: ReactiveX/RxJava

  1. @SuppressWarnings("unchecked")
  2. @Test
  3. public void noCompletionCancelOverlap() {
  4. final AtomicInteger counter = new AtomicInteger();
  5. Observable.<Integer>empty()
  6. .doOnDispose(new Action() {
  7. @Override
  8. public void run() throws Exception {
  9. counter.getAndIncrement();
  10. }
  11. })
  12. .buffer(10, 5, TimeUnit.SECONDS)
  13. .test()
  14. .awaitDone(5, TimeUnit.SECONDS)
  15. .assertResult(Collections.<Integer>emptyList());
  16. assertEquals(0, counter.get());
  17. }

代码示例来源:origin: ReactiveX/RxJava

  1. @SuppressWarnings("unchecked")
  2. @Test
  3. public void noCompletionCancelExact() {
  4. final AtomicInteger counter = new AtomicInteger();
  5. Observable.<Integer>empty()
  6. .doOnDispose(new Action() {
  7. @Override
  8. public void run() throws Exception {
  9. counter.getAndIncrement();
  10. }
  11. })
  12. .buffer(5, TimeUnit.SECONDS)
  13. .test()
  14. .awaitDone(5, TimeUnit.SECONDS)
  15. .assertResult(Collections.<Integer>emptyList());
  16. assertEquals(0, counter.get());
  17. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void normal() {
  3. final int[] calls = { 0 };
  4. Observable.just(1)
  5. .doOnDispose(new Action() {
  6. @Override
  7. public void run() throws Exception {
  8. calls[0]++;
  9. }
  10. })
  11. .unsubscribeOn(Schedulers.single())
  12. .test()
  13. .assertResult(1);
  14. assertEquals(0, calls[0]);
  15. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void testUsingDisposesEagerlyBeforeCompletion() {
  3. final List<String> events = new ArrayList<String>();
  4. Callable<Resource> resourceFactory = createResourceFactory(events);
  5. final Action completion = createOnCompletedAction(events);
  6. final Action unsub = createUnsubAction(events);
  7. Function<Resource, Observable<String>> observableFactory = new Function<Resource, Observable<String>>() {
  8. @Override
  9. public Observable<String> apply(Resource resource) {
  10. return Observable.fromArray(resource.getTextFromWeb().split(" "));
  11. }
  12. };
  13. Observer<String> observer = TestHelper.mockObserver();
  14. Observable<String> o = Observable.using(resourceFactory, observableFactory,
  15. new DisposeAction(), true)
  16. .doOnDispose(unsub)
  17. .doOnComplete(completion);
  18. o.safeSubscribe(observer);
  19. assertEquals(Arrays.asList("disposed", "completed" /* , "unsub" */), events);
  20. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void testUsingDoesNotDisposesEagerlyBeforeCompletion() {
  3. final List<String> events = new ArrayList<String>();
  4. Callable<Resource> resourceFactory = createResourceFactory(events);
  5. final Action completion = createOnCompletedAction(events);
  6. final Action unsub = createUnsubAction(events);
  7. Function<Resource, Observable<String>> observableFactory = new Function<Resource, Observable<String>>() {
  8. @Override
  9. public Observable<String> apply(Resource resource) {
  10. return Observable.fromArray(resource.getTextFromWeb().split(" "));
  11. }
  12. };
  13. Observer<String> observer = TestHelper.mockObserver();
  14. Observable<String> o = Observable.using(resourceFactory, observableFactory,
  15. new DisposeAction(), false)
  16. .doOnDispose(unsub)
  17. .doOnComplete(completion);
  18. o.safeSubscribe(observer);
  19. assertEquals(Arrays.asList("completed", /*"unsub",*/ "disposed"), events);
  20. }

代码示例来源:origin: ReactiveX/RxJava

  1. @Test
  2. public void error() {
  3. final int[] calls = { 0 };
  4. Observable.error(new TestException())
  5. .doOnDispose(new Action() {
  6. @Override
  7. public void run() throws Exception {
  8. calls[0]++;
  9. }
  10. })
  11. .unsubscribeOn(Schedulers.single())
  12. .test()
  13. .assertFailure(TestException.class);
  14. assertEquals(0, calls[0]);
  15. }

相关文章

Observable类方法