Slide 1

Slide 1 text

1MVHJOT XJUI 6OJU5FTUJOH !J[VNJO QPUBUPUJQT 3Y +BWB "OESPJE .BTBZVLJ*;6.* map({ }) subscribeOn({ })

Slide 2

Slide 2 text

> Masayuki IZUMI a.k.a. @izumin5210 > Rekimoto Lab. at the Univ. of Tokyo > Strobo, Inc. / Wantedly, Inc. > Rubyist / Androider / {Java,Type}Scripter

Slide 3

Slide 3 text

3Y+BWBUFTUVUJMJUJFT 5FTU4VCTDSJCFS5 5FTU4DIFEVFS 5FTU4VCKFDU5

Slide 4

Slide 4 text

3Y+BWBUFTUVUJMJUJFT 5FTU4VCTDSJCFS5 DBOJOTQFDUSFDFJWFEFWFOUT DBOQFSGPSNBTTFSUJPOT FUD 5FTU4DIFEVFS DBONBOVBMMZBEWBODFUIFDMPDL 5FTU4VCKFDU5 DBODPOUSPMFNJTTJPOXJUIA5FTU4DIFEVMFSA

Slide 5

Slide 5 text

&YBNQMF TestSubscriber subscriber = new TestSubscriber<>(); TestScheduler scheduler = new TestScheduler(); PublishSubject subject = PublishSubject.create(); subject.buffer(3000, TimeUnit.MILLISECONDS, scheduler) .subscribe(subscriber); subject.onNext(new User("Alice")); subscriber.assertValueCount(0); scheduler.advanceTimeBy(3000, TimeUnit.MILLISECONDS); subscriber.assertValueCount(1);

Slide 6

Slide 6 text

&YBNQMF TestSubscriber subscriber = new TestSubscriber<>(); TestScheduler scheduler = new TestScheduler(); PublishSubject subject = PublishSubject.create(); subject.buffer(3000, TimeUnit.MILLISECONDS, scheduler) .subscribe(subscriber); subject.onNext(new User("Alice")); subscriber.assertValueCount(0); scheduler.advanceTimeBy(3000, TimeUnit.MILLISECONDS); subscriber.assertValueCount(1);

Slide 7

Slide 7 text

&YBNQMF TestSubscriber subscriber = new TestSubscriber<>(); TestScheduler scheduler = new TestScheduler(); PublishSubject subject = PublishSubject.create(); subject.buffer(3000, TimeUnit.MILLISECONDS, scheduler) .subscribe(subscriber); subject.onNext(new User("Alice")); subscriber.assertValueCount(0); scheduler.advanceTimeBy(3000, TimeUnit.MILLISECONDS); subscriber.assertValueCount(1);

Slide 8

Slide 8 text

CZUIFXBZ

Slide 9

Slide 9 text

)PXUPXSJUFVOJUUFTU void onResume() { //snip. service.repos(user) .flatMap(Observable::from) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(repo -> { /* do something in UI thread*/ }); }

Slide 10

Slide 10 text

)PXUPXSJUFVOJUUFTU void onResume() { //snip. service.repos(user) .flatMap(Observable::from) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(repo -> { /* do something in UI thread*/ }); }

Slide 11

Slide 11 text

)PXUPXSJUFVOJUUFTU void onResume() { //snip. service.repos(user) .flatMap(Observable::from) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(repo -> { /* do something in UI thread*/ }); } $BO` UVTF 5FTU4VCTDSJCFS5FTU4DIFEVMFS BGUFSTVCTDSJCF

Slide 12

Slide 12 text

$BOXFSFQMBDFTDIFEVMFST

Slide 13

Slide 13 text

3Y+BWB1MVHJOT 3Y"OESPJE1MVHJOT

Slide 14

Slide 14 text

1MVHJOTBMMPXZPVUPNPEJGZUIFEFGBVMUCFIBWJPSPG3Y+BWBJOTFWFSBMSFTQFDUT CZDIBOHJOHUIFTFUPGEFGBVMUDPNQVUBUJPO JP BOEOFXUISFBE4DIFEVMFST CZSFHJTUFSJOHBIBOEMFSGPSFYUSBPSEJOBSZFSSPSTUIBU3Y+BWBNBZFODPVOUFS CZSFHJTUFSJOHGVODUJPOTUIBUDBOUBLFOPUFPGUIFPDDVSSFODF PGTFWFSBMSFHVMBS3Y+BWBBDUJWJUJFT IUUQTHJUIVCDPN3FBDUJWF93Y+BWBXJLJ1MVHJOT

Slide 15

Slide 15 text

1MVHJOTBMMPXZPVUPNPEJGZUIFEFGBVMUCFIBWJPSPG3Y+BWBJOTFWFSBMSFTQFDUT CZDIBOHJOHUIFTFUPGEFGBVMUDPNQVUBUJPO JP BOEOFXUISFBE4DIFEVMFST CZSFHJTUFSJOHBIBOEMFSGPSFYUSBPSEJOBSZFSSPSTUIBU3Y+BWBNBZFODPVOUFS CZSFHJTUFSJOHGVODUJPOTUIBUDBOUBLFOPUFPGUIFPDDVSSFODF PGTFWFSBMSFHVMBS3Y+BWBBDUJWJUJFT IUUQTHJUIVCDPN3FBDUJWF93Y+BWBXJLJ1MVHJOT

Slide 16

Slide 16 text

6TFJNNFEJBUFTDIFEVMFSJOTUFBEPG*0TDIFEVMFS RxJavaPlugins.getInstance() .registerSchedulersHook(new RxJavaSchedulersHook() { @Override public Scheduler getIOScheduler() { return Schedulers.immediate(); } }); /* do something... */ RxJavaPlugins.getInstance().reset();

Slide 17

Slide 17 text

6TFJNNFEJBUFTDIFEVMFSJOTUFBEPG*0TDIFEVMFS RxJavaPlugins.getInstance() .registerSchedulersHook(new RxJavaSchedulersHook() { @Override public Scheduler getIOScheduler() { return Schedulers.immediate(); } }); /* do something... */ RxJavaPlugins.getInstance().reset();

Slide 18

Slide 18 text

6TFJNNFEJBUFTDIFEVMFSJOTUFBEPG "OESPJENBJOUISFBETDIFEVMFS RxAndroidPlugins.getInstance() .registerSchedulersHook(new RxAndroidSchedulersHook() { @Override public Scheduler getMainThreadScheduler() { return Schedulers.immediate(); } }); /* do something... */ RxAndroidPlugins.getInstance().reset();

Slide 19

Slide 19 text

6TFJNNFEJBUFTDIFEVMFSJOTUFBEPG "OESPJENBJOUISFBETDIFEVMFS RxAndroidPlugins.getInstance() .registerSchedulersHook(new RxAndroidSchedulersHook() { @Override public Scheduler getMainThreadScheduler() { return Schedulers.immediate(); } }); /* do something... */ RxAndroidPlugins.getInstance().reset();

Slide 20

Slide 20 text

3Y+BWBUFTUVUJMJUJFT 3Y+BWB&SSPS)BOEMFS DBOJOTQFDUSFDFJWFEFWFOUT DBOQFSGPSNBTTFSUJPOT FUD 3Y+BWB0CTFSWBCMF&YFDVUJPO)PPL DBONBOVBMMZBEWBODFUIFDMPDL 3Y+BWB4DIFEVMFST)PPL DBODPOUSPMFNJTTJPOXJUIA5FTU4DIFEVMFSA

Slide 21

Slide 21 text

3Y+BWBUFTUVUJMJUJFT 3Y+BWB&SSPS)BOEMFS DBOJOTQFDUSFDFJWFEFWFOUT DBOQFSGPSNBTTFSUJPOT FUD 3Y+BWB0CTFSWBCMF&YFDVUJPO)PPL DBONBOVBMMZBEWBODFUIFDMPDL 3Y+BWB4DIFEVMFST)PPL DBODPOUSPMFNJTTJPOXJUIA5FTU4DIFEVMFSA

Slide 22

Slide 22 text

&SSPSIBOEMFS RxJavaPlugins.getInstance() .registerErrorHandler(new RxJavaErrorHandler() { @Override public void handleError(Throwable e) { super.handleError(e); } @Override protected String render(Object item) throws InterruptedException { return super.render(item); } });

Slide 23

Slide 23 text

$PODMVTJPO 8IFOZPVXSJUFVOJUUFTUXJUI3Y+BWB 5FTU4VCTDSJCFS5 5FTU4DIFEVMFS 5FTU4VCKFDU5 BSFWFSZVTFGVM *GZPVUFTUUIFDPEFVTJOHPUIFSUISFBE 3Y+BWB1MVHJOTBOE3Y"OESPJE1MVHJOT DBOSFQMBDFXJUIBOZTDIFEVMFST

Slide 24

Slide 24 text

1MVHJOT XJUI 6OJU5FTUJOH !J[VNJO QPUBUPUJQT 3Y +BWB "OESPJE .BTBZVLJ*;6.* map({ }) subscribeOn({ })