The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf ·...
Transcript of The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf ·...
![Page 1: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/1.jpg)
The Art of RxМатвей Мальков
![Page 2: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/2.jpg)
2Обо мне
![Page 3: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/3.jpg)
3Обо мне
![Page 4: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/4.jpg)
4Обо мне
![Page 5: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/5.jpg)
5Обо мне
![Page 6: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/6.jpg)
Èñêóññòâî ðåàêòèâíîãî ïðîãðàììèðîâàíèÿ
![Page 7: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/7.jpg)
Èñêóññòâî – âûñîêàÿ ñòåïåíü ìàñòåðñòâà â êàêîé-ëèáî
ñôåðå äåÿòåëüíîñòè.
![Page 8: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/8.jpg)
Íàø ãëàâíûé íàâûê – óìåíèå äóìàòü
![Page 9: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/9.jpg)
9Умение думать. Практика
![Page 10: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/10.jpg)
• î ÷åì äóìàòü?
9Умение думать. Практика
![Page 11: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/11.jpg)
• î ÷åì äóìàòü?
• êàê äóìàòü?
9Умение думать. Практика
![Page 12: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/12.jpg)
10О чем думать мобильному разработчику
![Page 13: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/13.jpg)
• ýíåðãîïîòðåáëåíèå
10О чем думать мобильному разработчику
![Page 14: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/14.jpg)
• ýíåðãîïîòðåáëåíèå
• ïëàâíîñòü èíòåðôåéñà (60 fps)
10О чем думать мобильному разработчику
![Page 15: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/15.jpg)
• ýíåðãîïîòðåáëåíèå
• ïëàâíîñòü èíòåðôåéñà (60 fps)
• ôðàãìåíòàöèÿ óñòðîéñòâ
10О чем думать мобильному разработчику
![Page 16: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/16.jpg)
• ýíåðãîïîòðåáëåíèå
• ïëàâíîñòü èíòåðôåéñà (60 fps)
• ôðàãìåíòàöèÿ óñòðîéñòâ
• ïîòðåáëåíèå ïàìÿòè
10О чем думать мобильному разработчику
![Page 17: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/17.jpg)
11Как думать мобильному разработчику?
![Page 18: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/18.jpg)
• êàê ïîëüçîâàòåëü
11Как думать мобильному разработчику?
![Page 19: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/19.jpg)
• êàê ïîëüçîâàòåëü
• êàê äèçàéíåð
11Как думать мобильному разработчику?
![Page 20: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/20.jpg)
• êàê ïîëüçîâàòåëü
• êàê äèçàéíåð
• êàê ïðåäëàãàåò ôóíäàìåíòàëüíûé ôðåéìâîðê
11Как думать мобильному разработчику?
![Page 21: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/21.jpg)
12Фундаментальный фреймворк
![Page 22: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/22.jpg)
• äåëàåò ðàçðàáîòêó ïðîùå/ëó÷øå/áûñòðåå
12Фундаментальный фреймворк
![Page 23: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/23.jpg)
• äåëàåò ðàçðàáîòêó ïðîùå/ëó÷øå/áûñòðåå
• ïðèâíîñèò ÷òî-òî êîíöåïòóàëüíî íîâîå
12Фундаментальный фреймворк
![Page 24: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/24.jpg)
• äåëàåò ðàçðàáîòêó ïðîùå/ëó÷øå/áûñòðåå
• ïðèâíîñèò ÷òî-òî êîíöåïòóàëüíî íîâîå
• ïðîðàñòàåò âî âñå ïîäñèñòåìû
12Фундаментальный фреймворк
![Page 25: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/25.jpg)
• äåëàåò ðàçðàáîòêó ïðîùå/ëó÷øå/áûñòðåå
• ïðèâíîñèò ÷òî-òî êîíöåïòóàëüíî íîâîå
• ïðîðàñòàåò âî âñå ïîäñèñòåìû
• ñëîæíî óáðàòü
12Фундаментальный фреймворк
![Page 26: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/26.jpg)
• äåëàåò ðàçðàáîòêó ïðîùå/ëó÷øå/áûñòðåå
• ïðèâíîñèò ÷òî-òî êîíöåïòóàëüíî íîâîå
• ïðîðàñòàåò âî âñå ïîäñèñòåìû
• ñëîæíî óáðàòü
• òðåáóåò íàâûêîâ îáðàùåíèÿ
12Фундаментальный фреймворк
![Page 27: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/27.jpg)
Íàø ëþáèìûé ôóíäàìåíòàëüíûé ôðåéìâîðê – RxJava
![Page 28: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/28.jpg)
Î ÷eì äóìàòü, èñïîëüçóÿ RxJava?
![Page 29: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/29.jpg)
Î êîíòðàêòàõ
![Page 30: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/30.jpg)
16О контрактах
![Page 31: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/31.jpg)
• ïðîáëåìû:
16О контрактах
![Page 32: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/32.jpg)
• ïðîáëåìû:
• ïîíèìàíèå
16О контрактах
![Page 33: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/33.jpg)
• ïðîáëåìû:
• ïîíèìàíèå
• ñîáëþäåíèå
16О контрактах
![Page 34: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/34.jpg)
• ïðîáëåìû:
• ïîíèìàíèå
• ñîáëþäåíèå
• âàæíî:
16О контрактах
![Page 35: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/35.jpg)
• ïðîáëåìû:
• ïîíèìàíèå
• ñîáëþäåíèå
• âàæíî:
• îñíîâû
16О контрактах
![Page 36: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/36.jpg)
17Нотификации
![Page 37: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/37.jpg)
• onNext – 0, n èëè inf
17Нотификации
![Page 38: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/38.jpg)
• onNext – 0, n èëè inf
• onCompleted – 0 èëè 1
17Нотификации
![Page 39: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/39.jpg)
• onNext – 0, n èëè inf
• onCompleted – 0 èëè 1
• onError – 0 èëè 1
17Нотификации
![Page 40: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/40.jpg)
• onNext – 0, n èëè inf
• onCompleted – 0 èëè 1
• onError – 0 èëè 1
• onCompleted + onError <= 1
17Нотификации
![Page 41: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/41.jpg)
18Подписка и отписка
![Page 42: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/42.jpg)
• íå íóæíî îòïèñûâàòüñÿ ïîñëå çàâåðøåíèÿ
18Подписка и отписка
![Page 43: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/43.jpg)
• íå íóæíî îòïèñûâàòüñÿ ïîñëå çàâåðøåíèÿ
• ïðè îòïèñêå çàâåðøåíèå íå ãàðàíòèðîâàíî
18Подписка и отписка
![Page 44: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/44.jpg)
19Observable<Response> obs = Observable .interval(1, TimeUnit.SECONDS) .map(this!::sendPing) .cache();
![Page 45: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/45.jpg)
20Observable<Response> obs = Observable .interval(1, TimeUnit.SECONDS) .map(this!::sendPing) .cache();
![Page 46: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/46.jpg)
21Observable<Response> obs = Observable .interval(1, TimeUnit.SECONDS) .map(this!::sendPing) .cache();
![Page 47: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/47.jpg)
22Observable<Response> obs = Observable .interval(1, TimeUnit.SECONDS) .map(this!::sendPing) .cache();
![Page 48: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/48.jpg)
23Observable<Response> obs = Observable .interval(1, TimeUnit.SECONDS) .map(this!::sendPing) .cache();Subscription sub = obs.subscribe();
![Page 49: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/49.jpg)
24Observable<Response> obs = Observable .interval(1, TimeUnit.SECONDS) .map(this!::sendPing) .cache();Subscription sub = obs.subscribe();!//позжеsub.unsubscribe();
![Page 50: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/50.jpg)
25Observable<Response> obs = Observable .interval(1, TimeUnit.SECONDS) .map(this!::sendPing) .cache();Subscription sub = obs.subscribe();!//позжеsub.unsubscribe();
Note: You sacrifice the ability to unsubscribe from the origin
![Page 51: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/51.jpg)
26Observable<Response> obs = Observable .interval(1, TimeUnit.SECONDS) .map(this!::sendPing) .cache();Subscription sub = obs.subscribe();!//позжеsub.unsubscribe();
Note: You sacrifice the ability to unsubscribe from the origin
![Page 52: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/52.jpg)
27О контрактах
![Page 54: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/54.jpg)
• îòïðàâêà íîòèôèêàöèé
• çàâåðøåíèå ñ îøèáêîé
27О контрактах
![Page 55: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/55.jpg)
• îòïðàâêà íîòèôèêàöèé
• çàâåðøåíèå ñ îøèáêîé
• ïîëíûé ñïèñîê : http://reactivex.io/documentation/contract.html
27О контрактах
![Page 56: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/56.jpg)
28Состояние системы
![Page 57: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/57.jpg)
• èçîëèðîâàííî
28Состояние системы
![Page 58: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/58.jpg)
• èçîëèðîâàííî
• îäèí èñòî÷íèê
28Состояние системы
![Page 59: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/59.jpg)
• èçîëèðîâàííî
• îäèí èñòî÷íèê
• íåèçìåíÿåìî
28Состояние системы
![Page 60: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/60.jpg)
• èçîëèðîâàííî
• îäèí èñòî÷íèê
• íåèçìåíÿåìî
• ïîä÷èíÿåòñÿ êîíòðàêòó Observable
28Состояние системы
![Page 61: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/61.jpg)
29
nameEditTextChanges.subscribe(this!::updateName);
![Page 62: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/62.jpg)
30
nameEditTextChanges.subscribe(this!::updateName);
PublishSubject<Integer> nameEditTextChanges = PublishSubject.create();
![Page 63: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/63.jpg)
31
nameEditTextChanges.subscribe(this!::updateName);
PublishSubject<Integer> nameEditTextChanges = PublishSubject.create();
nameEditTextChanges.onNext("хаха, обманул!");
![Page 64: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/64.jpg)
Subject – âîçìîæíîå íàðóøåíèå êîíòðàêòà
![Page 65: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/65.jpg)
Subject – âîçìîæíîå íàðóøåíèå êîíòðàêòà
![Page 66: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/66.jpg)
• èçîëèðîâàííî
• îäèí èñòî÷íèê
• íåèçìåíÿåìî
• ïîä÷èíÿåòñÿ êîíòðàêòó Observable
34Состояние системы
![Page 67: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/67.jpg)
35Subjects
![Page 68: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/68.jpg)
• ñîåäèíåíèå èìïåðàòèâíîãî è ðåàêòèâíîãî ìèðà
35Subjects
![Page 69: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/69.jpg)
• ñîåäèíåíèå èìïåðàòèâíîãî è ðåàêòèâíîãî ìèðà
• êîãäà íåâîçìîæíî ñäåëàòü ïî äðóãîìó
35Subjects
![Page 70: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/70.jpg)
• ñîåäèíåíèå èìïåðàòèâíîãî è ðåàêòèâíîãî ìèðà
• êîãäà íåâîçìîæíî ñäåëàòü ïî äðóãîìó
• ýòî âàø ñëó÷àé? ÍÅÒ!
35Subjects
![Page 71: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/71.jpg)
• ñîåäèíåíèå èìïåðàòèâíîãî è ðåàêòèâíîãî ìèðà
• êîãäà íåâîçìîæíî ñäåëàòü ïî äðóãîìó
• ýòî âàø ñëó÷àé? ÍÅÒ!
• âñå òàêè âàø? Íåò, ýòî íå òàê!
35Subjects
![Page 72: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/72.jpg)
• ñîåäèíåíèå èìïåðàòèâíîãî è ðåàêòèâíîãî ìèðà
• êîãäà íåâîçìîæíî ñäåëàòü ïî äðóãîìó
• ýòî âàø ñëó÷àé? ÍÅÒ!
• âñå òàêè âàø? Íåò, ýòî íå òàê!
• ìåíüøå – ëó÷øå
35Subjects
![Page 73: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/73.jpg)
О тредах
![Page 74: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/74.jpg)
37О тредах
![Page 75: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/75.jpg)
• ïðîáëåìû
37О тредах
![Page 76: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/76.jpg)
• ïðîáëåìû
• íåò ïîíèìàÿ ðàáîòû
37О тредах
![Page 77: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/77.jpg)
• ïðîáëåìû
• íåò ïîíèìàÿ ðàáîòû
• ñóþò subscribeOn è observeOn âåçäå ïîäðÿä
37О тредах
![Page 78: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/78.jpg)
• ïðîáëåìû
• íåò ïîíèìàÿ ðàáîòû
• ñóþò subscribeOn è observeOn âåçäå ïîäðÿä
• âàæíî :
37О тредах
![Page 79: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/79.jpg)
• ïðîáëåìû
• íåò ïîíèìàÿ ðàáîòû
• ñóþò subscribeOn è observeOn âåçäå ïîäðÿä
• âàæíî :
• ðàçáèðàòüñÿ
37О тредах
![Page 80: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/80.jpg)
38Scheduler
![Page 81: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/81.jpg)
• ïëàíèðîâêà çàäà÷
38Scheduler
![Page 82: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/82.jpg)
• ïëàíèðîâêà çàäà÷
• ðàáîòà ñ òðåäàìè
38Scheduler
![Page 83: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/83.jpg)
• ïëàíèðîâêà çàäà÷
• ðàáîòà ñ òðåäàìè
• subscribeOn
38Scheduler
![Page 84: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/84.jpg)
• ïëàíèðîâêà çàäà÷
• ðàáîòà ñ òðåäàìè
• subscribeOn
• observeOn
38Scheduler
![Page 85: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/85.jpg)
Äîãìû observeOn
subscribeOn
![Page 86: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/86.jpg)
1. observeOn ìåíÿåò Scheduler äëÿ âñåãî, ÷òî íèæå ïî êîäó
![Page 87: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/87.jpg)
2. subscribeOn ìåíÿåò Scheduler ñ ñàìîãî âåðõà öåïî÷êè
![Page 88: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/88.jpg)
3. Êàæäûé ñëåäóþùèé observeOn çàìåíÿåò ïðåäûäóùèé
![Page 89: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/89.jpg)
4. subscribeOn àêòóàëåí äî ïåðâîãî observeOn
![Page 90: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/90.jpg)
Âñåãäà äóìàéòå î òîì, â êàêîì òðåäå âûïîëíÿåòñÿ ôóíêöèÿ
![Page 91: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/91.jpg)
45
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .map(this!::cacheAndModify);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 92: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/92.jpg)
46
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .map(this!::cacheAndModify);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 93: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/93.jpg)
47
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .observeOn(networkScheduler) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .subscribeOn(Schedulers.computation()) .observeOn(mainThread) .map(this!::toUiModel);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 94: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/94.jpg)
48
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .observeOn(networkScheduler) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .subscribeOn(Schedulers.computation()) .observeOn(mainThread) .map(this!::toUiModel);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 95: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/95.jpg)
49
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .observeOn(networkScheduler) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .subscribeOn(Schedulers.computation()) .observeOn(mainThread) .map(this!::toUiModel);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 96: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/96.jpg)
50
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .observeOn(networkScheduler) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .subscribeOn(Schedulers.computation()) .observeOn(mainThread) .map(this!::toUiModel);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 97: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/97.jpg)
51
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .observeOn(networkScheduler) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .subscribeOn(Schedulers.computation()) .observeOn(mainThread) .map(this!::toUiModel);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 98: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/98.jpg)
52
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .observeOn(networkScheduler) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .subscribeOn(Schedulers.computation()) .observeOn(mainThread) .map(this!::toUiModel);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 99: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/99.jpg)
53
Observable<Response> requestObs = userDbChanges .filter(u 0-> u.age < 18) .map(this!::toRequestModel) .observeOn(networkScheduler) .map(this!::doRequest) .onErrorReturn(this!::doRecoverReq) .subscribeOn(Schedulers.computation()) .observeOn(mainThread) .map(this!::toUiModel);!//ui threadrequestObs.subscribe(this!::showOnUi);
![Page 100: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/100.jpg)
Âåëèêîëåïíûé subscribeOn
![Page 101: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/101.jpg)
55subscribeOn
public final Observable<T> subscribeOn(Scheduler scheduler) { !//какой-то неважный код return nest().lift(new OperatorSubscribeOn<T>(scheduler));}
![Page 102: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/102.jpg)
56subscribeOn
public final Observable<T> subscribeOn(Scheduler scheduler) { !//какой-то неважный код return nest().lift(new OperatorSubscribeOn<T>(scheduler));}
![Page 103: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/103.jpg)
57
public final Observable<Observable<T9>> nest() { return just(this);}
![Page 104: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/104.jpg)
58
![Page 105: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/105.jpg)
59
nest
![Page 106: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/106.jpg)
60
nest
![Page 107: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/107.jpg)
61subscribeOn
public final Observable<T> subscribeOn(Scheduler scheduler) { !//какой-то неважный код return nest().lift(new OperatorSubscribeOn<T>(scheduler));}
![Page 108: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/108.jpg)
62subscribeOn
public final Observable<T> subscribeOn(Scheduler scheduler) { !//какой-то неважный код return nest().lift(new OperatorSubscribeOn<T>(scheduler));}
![Page 109: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/109.jpg)
63subscribeOn
public final Observable<T> subscribeOn(Scheduler scheduler) { !//какой-то неважный код return nest().lift(new OperatorSubscribeOn<T>(scheduler));}
![Page 110: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/110.jpg)
64
public class OperatorSubscribeOn<T> implements Operator<T, Observable<T9>> { private final Scheduler scheduler; public OperatorSubscribeOn(Scheduler scheduler) { this.scheduler = scheduler; } @Override public Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { … }
![Page 111: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/111.jpg)
65
public class OperatorSubscribeOn<T> implements Operator<T, Observable<T9>> { private final Scheduler scheduler; public OperatorSubscribeOn(Scheduler scheduler) { this.scheduler = scheduler; } @Override public Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { … }
принимаетвозвращает
![Page 112: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/112.jpg)
66
public class OperatorSubscribeOn<T> implements Operator<T, Observable<T9>> { private final Scheduler scheduler; public OperatorSubscribeOn(Scheduler scheduler) { this.scheduler = scheduler; } @Override public Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { … }
![Page 113: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/113.jpg)
67@Overridepublic Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { final Worker inner = scheduler.createWorker(); subscriber.add(inner); return new Subscriber<Observable<T9>>(subscriber) { @Override public void onNext(final Observable<T> o) { inner.schedule(new Action0() { @Override public void call() { final Thread t = Thread.currentThread(); o.unsafeSubscribe(new Subscriber<T>(subscriber) { !//обычный inner subscribe } !//тут еще оооочень много закрывающихся скобочек}
![Page 114: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/114.jpg)
68@Overridepublic Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { final Worker inner = scheduler.createWorker(); subscriber.add(inner); return new Subscriber<Observable<T9>>(subscriber) { @Override public void onNext(final Observable<T> o) { inner.schedule(new Action0() { @Override public void call() { final Thread t = Thread.currentThread(); o.unsafeSubscribe(new Subscriber<T>(subscriber) { !//обычный inner subscribe } !//тут еще оооочень много закрывающихся скобочек}
![Page 115: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/115.jpg)
69@Overridepublic Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { final Worker inner = scheduler.createWorker(); subscriber.add(inner); return new Subscriber<Observable<T9>>(subscriber) { @Override public void onNext(final Observable<T> o) { inner.schedule(new Action0() { @Override public void call() { final Thread t = Thread.currentThread(); o.unsafeSubscribe(new Subscriber<T>(subscriber) { !//обычный inner subscribe } !//тут еще оооочень много закрывающихся скобочек}
![Page 116: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/116.jpg)
70@Overridepublic Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { final Worker inner = scheduler.createWorker(); subscriber.add(inner); return new Subscriber<Observable<T9>>(subscriber) { @Override public void onNext(final Observable<T> o) { inner.schedule(new Action0() { @Override public void call() { final Thread t = Thread.currentThread(); o.unsafeSubscribe(new Subscriber<T>(subscriber) { !//обычный inner subscribe } !//тут еще оооочень много закрывающихся скобочек}
![Page 117: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/117.jpg)
71@Overridepublic Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { final Worker inner = scheduler.createWorker(); subscriber.add(inner); return new Subscriber<Observable<T9>>(subscriber) { @Override public void onNext(final Observable<T> o) { inner.schedule(new Action0() { @Override public void call() { final Thread t = Thread.currentThread(); o.unsafeSubscribe(new Subscriber<T>(subscriber) { !//обычный inner subscribe } !//тут еще оооочень много закрывающихся скобочек}
Наш Observable
![Page 118: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/118.jpg)
72@Overridepublic Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { final Worker inner = scheduler.createWorker(); subscriber.add(inner); return new Subscriber<Observable<T9>>(subscriber) { @Override public void onNext(final Observable<T> o) { inner.schedule(new Action0() { @Override public void call() { final Thread t = Thread.currentThread(); o.unsafeSubscribe(new Subscriber<T>(subscriber) { !//обычный inner subscribe } !//тут еще оооочень много закрывающихся скобочек}
![Page 119: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/119.jpg)
73@Overridepublic Subscriber<? super Observable<T9>> call(final Subscriber<? super T> subscriber) { final Worker inner = scheduler.createWorker(); subscriber.add(inner); return new Subscriber<Observable<T9>>(subscriber) { @Override public void onNext(final Observable<T> o) { inner.schedule(new Action0() { @Override public void call() { final Thread t = Thread.currentThread(); o.unsafeSubscribe(new Subscriber<T>(subscriber) { !//обычный inner subscribe } !//тут еще оооочень много закрывающихся скобочек}
![Page 120: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/120.jpg)
74
![Page 121: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/121.jpg)
75
OperatorSubscribeOn(Scheduler)
![Page 122: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/122.jpg)
76
OperatorSubscribeOn(Scheduler)
![Page 123: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/123.jpg)
Ãåíèàëüíî!
![Page 124: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/124.jpg)
78
Observable.just(1) .subscribeOn(scheduler1) .subscribeOn(scheduler2) .subscribe();
![Page 125: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/125.jpg)
79
Observable.just(1) .subscribeOn(scheduler1) .subscribeOn(scheduler2) .subscribe(); !//scheduler1
![Page 126: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/126.jpg)
2. subscribeOn ìåíÿåò Scheduler ñ ñàìîãî âåðõà öåïî÷êè
![Page 127: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/127.jpg)
2. Ïåðâûé subscribeOn ìåíÿåò Scheduler ñ ñàìîãî âåðõà öåïî÷êè
![Page 128: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/128.jpg)
82
!//computationObservable<Long> o1 = Observable.interval(1, TimeUnit.SECONDS); !//networkObservable<Integer> o2 = Observable.just(1) .observeOn(networkScheduler);Observable.zip(o1, o2, o3, (r1, r2) 0-> r1 * r2);
![Page 129: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/129.jpg)
83
!//computationObservable<Long> o1 = Observable.interval(1, TimeUnit.SECONDS); !//networkObservable<Integer> o2 = Observable.just(1) .observeOn(networkScheduler);Observable.zip(o1, o2, o3, (r1, r2) 0-> r1 * r2);
![Page 130: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/130.jpg)
84
!//computationObservable<Long> o1 = Observable.interval(1, TimeUnit.SECONDS); !//networkObservable<Integer> o2 = Observable.just(1) .observeOn(networkScheduler);Observable.zip(o1, o2, o3, (r1, r2) 0-> r1 * r2); !//computation or network
![Page 131: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/131.jpg)
85final class InnerSubscriber extends Subscriber { @Override public void onNext(Object t) { try { items.onNext(t); } catch (MissingBackpressureException e) { onError(e); } tick(); }};
![Page 132: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/132.jpg)
86final class InnerSubscriber extends Subscriber { @Override public void onNext(Object t) { try { items.onNext(t); } catch (MissingBackpressureException e) { onError(e); } tick(); }};
![Page 133: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/133.jpg)
87
void tick() { !//тут много кода, не имеющего сейчас значения if (requested.get() > 0 !&& allHaveValues) { try { !// всем потокам есть что zip’ать child.onNext(zipFunction.call(vs));
} !// еще много кода и скобочки
![Page 134: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/134.jpg)
88
void tick() { !//тут много кода, не имеющего сейчас значения if (requested.get() > 0 !&& allHaveValues) { try { !// всем потокам есть что zip’ать child.onNext(zipFunction.call(vs));
} !// еще много кода и скобочки
![Page 135: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/135.jpg)
89
void tick() { !//тут много кода, не имеющего сейчас значения if (requested.get() > 0 !&& allHaveValues) { try { !// всем потокам есть что zip’ать child.onNext(zipFunction.call(vs));
} !// еще много кода и скобочки
![Page 136: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/136.jpg)
Âñåãäà äóìàéòå î òîì, â êàêîì òðåäå âûïîëíÿåòñÿ ôóíêöèÿ
![Page 137: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/137.jpg)
О количестве элементов
![Page 138: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/138.jpg)
92Количество элементов
![Page 139: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/139.jpg)
• ïðîáëåìû:
92Количество элементов
![Page 140: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/140.jpg)
• ïðîáëåìû:
• áîëüøå ýëåìåíòîâ – áîëüøå ìóñîðà
92Количество элементов
![Page 141: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/141.jpg)
• ïðîáëåìû:
• áîëüøå ýëåìåíòîâ – áîëüøå ìóñîðà
• RxJava ïîñòîÿííî âñå êîïèðóåò
92Количество элементов
![Page 142: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/142.jpg)
• ïðîáëåìû:
• áîëüøå ýëåìåíòîâ – áîëüøå ìóñîðà
• RxJava ïîñòîÿííî âñå êîïèðóåò
• âàæíî:
92Количество элементов
![Page 143: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/143.jpg)
• ïðîáëåìû:
• áîëüøå ýëåìåíòîâ – áîëüøå ìóñîðà
• RxJava ïîñòîÿííî âñå êîïèðóåò
• âàæíî:
• íå ïàíèêîâàòü
92Количество элементов
![Page 144: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/144.jpg)
• ïðîáëåìû:
• áîëüøå ýëåìåíòîâ – áîëüøå ìóñîðà
• RxJava ïîñòîÿííî âñå êîïèðóåò
• âàæíî:
• íå ïàíèêîâàòü
• çàáîòèòüñÿ î GC
92Количество элементов
![Page 145: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/145.jpg)
93Не паниковать
![Page 146: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/146.jpg)
• «×òî ñ GC?» : ñàìûé æàðêèé âîïðîñ
93Не паниковать
![Page 147: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/147.jpg)
• «×òî ñ GC?» : ñàìûé æàðêèé âîïðîñ
• êîïèðîâàíèå òîëüêî ïðè íîòèôèêàöèÿõ
93Не паниковать
![Page 148: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/148.jpg)
• «×òî ñ GC?» : ñàìûé æàðêèé âîïðîñ
• êîïèðîâàíèå òîëüêî ïðè íîòèôèêàöèÿõ
• âñå îïòèìèçèðîâàííî
93Не паниковать
![Page 149: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/149.jpg)
94
locationUpdates() .distinctUntilChanged() .subscribe();
![Page 150: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/150.jpg)
95
locationUpdates() .distinctUntilChanged() .subscribe();
![Page 151: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/151.jpg)
96
locationUpdates() .distinctUntilChanged() .subscribe();
touchEvents(view) .filter(e 0-> e.x > minWidth !&& e.y > minHeight) .doOnNext(this!::processEvents) .subscribe();
![Page 152: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/152.jpg)
97
locationUpdates() .distinctUntilChanged() .subscribe();
touchEvents(view) .filter(e 0-> e.x > minWidth !&& e.y > minHeight) .doOnNext(this!::processEvents) .subscribe();
![Page 153: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/153.jpg)
98
nameEditTextChanges .map(this!::prepareForSending) .map(this!::sendName) .map(this!::cacheAndModify);
![Page 154: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/154.jpg)
99
nameEditTextChanges .map(this!::prepareForSending) !//раз .map(this!::sendName) .map(this!::cacheAndModify);
![Page 155: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/155.jpg)
100
nameEditTextChanges .map(this!::prepareForSending) !//раз .map(this!::sendName) !// два .map(this!::cacheAndModify);
![Page 156: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/156.jpg)
101
nameEditTextChanges .map(this!::prepareForSending) !//раз .map(this!::sendName) !// два .map(this!::cacheAndModify); !// три
![Page 157: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/157.jpg)
102
nameEditTextChanges .debounce(500, TimeUnit.MILLISECONDS) .map(this!::prepareForSending) .map(this!::sendName) .map(this!::cacheAndModify);
![Page 158: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/158.jpg)
103debounce
![Page 159: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/159.jpg)
• áåðåæåò GC
103debounce
![Page 160: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/160.jpg)
• áåðåæåò GC
• áåðåæåò òðàôèê ïîëüçîâàòåëÿ
103debounce
![Page 161: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/161.jpg)
• áåðåæåò GC
• áåðåæåò òðàôèê ïîëüçîâàòåëÿ
• áåðåæåò íàñ îò BackPressure
103debounce
![Page 162: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/162.jpg)
104Backpressure
![Page 163: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/163.jpg)
• îòäàþùèé òðåä äàåò ìíîãî
104Backpressure
![Page 164: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/164.jpg)
• îòäàþùèé òðåä äàåò ìíîãî
• ïðèíèìàþùèé òðåä íå óñïåâàåò
104Backpressure
![Page 165: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/165.jpg)
• îòäàþùèé òðåä äàåò ìíîãî
• ïðèíèìàþùèé òðåä íå óñïåâàåò
• â ìíîãîïîòî÷íîé ñðåäå ìíîãîâåðîÿòíî
104Backpressure
![Page 166: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/166.jpg)
• îòäàþùèé òðåä äàåò ìíîãî
• ïðèíèìàþùèé òðåä íå óñïåâàåò
• â ìíîãîïîòî÷íîé ñðåäå ìíîãîâåðîÿòíî
• ïåðâûé ïðèçíàê – observeOn
104Backpressure
![Page 167: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/167.jpg)
105
events
touchEvents(view)
![Page 168: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/168.jpg)
106
events filter
touchEvents(view) .filter(e 0-> e.x > minWidth)
![Page 169: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/169.jpg)
107
events filter map
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize)
![Page 170: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/170.jpg)
108
events filter map observeOn
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler)
![Page 171: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/171.jpg)
109
events filter map observeOn
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending)
map
![Page 172: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/172.jpg)
110
events filter map observeOn
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest)
map map
![Page 173: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/173.jpg)
111
events filter map observeOn
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
map map subscriber
![Page 174: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/174.jpg)
112
events filter map observeOn
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
map map subscriber
![Page 175: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/175.jpg)
113
events filter map observeOn
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
map map subscriber
![Page 176: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/176.jpg)
114
events filter map observeOn
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
map map subscriber
![Page 177: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/177.jpg)
115
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 178: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/178.jpg)
116
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 179: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/179.jpg)
117
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 180: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/180.jpg)
118
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 181: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/181.jpg)
119
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 182: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/182.jpg)
120
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 183: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/183.jpg)
121
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 184: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/184.jpg)
122
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 185: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/185.jpg)
123
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 186: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/186.jpg)
124
events filter map observeOn
map map subscribertouchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 187: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/187.jpg)
125
events filter map observeOn
map map subscriber
2
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 188: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/188.jpg)
126
events filter map observeOn
map map subscriber
2
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 189: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/189.jpg)
127
events filter map observeOn
map map subscriber
2
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 190: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/190.jpg)
128
events filter map observeOn
map map subscriber
2
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 191: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/191.jpg)
129
events filter map observeOn
map map subscriber
3
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 192: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/192.jpg)
130
events filter map observeOn
map map subscriber
3
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 193: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/193.jpg)
131
events filter map observeOn
map map subscriber
3
Устал
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 194: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/194.jpg)
132
events filter map observeOn
map map subscriber
3
Устал
touchEvents(view) .filter(e 0-> e.x > minWidth) .map(this!::normalize) .observeOn(networkScheduler) .map(this!::prepareForSending) .map(this!::doMotionRequest) .subscribe()
![Page 195: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/195.jpg)
133
events filter map observeOn
map map subscriber
4
rx.exceptions.MissingBackpressureException
![Page 196: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/196.jpg)
134
Observable.zip( Observable.interval(10, TimeUnit.MILLISECONDS), Observable.interval(20, TimeUnit.MILLISECONDS), (r1, r2) 0-> r1 * r2).subscribe();
![Page 197: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/197.jpg)
135
Observable.zip( Observable.interval(10, TimeUnit.MILLISECONDS), Observable.interval(20, TimeUnit.MILLISECONDS), (r1, r2) 0-> r1 * r2).subscribe();
![Page 198: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/198.jpg)
136
Observable.zip( Observable.interval(10, TimeUnit.MILLISECONDS), Observable.interval(20, TimeUnit.MILLISECONDS), (r1, r2) 0-> r1 * r2).subscribe();
![Page 199: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/199.jpg)
137
Observable.zip( Observable.interval(10, TimeUnit.MILLISECONDS), Observable.interval(20, TimeUnit.MILLISECONDS), (r1, r2) 0-> r1 * r2).subscribe();
![Page 200: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/200.jpg)
138
Observable.zip( Observable.interval(10, TimeUnit.MILLISECONDS), Observable.interval(20, TimeUnit.MILLISECONDS), (r1, r2) 0-> r1 * r2).subscribe();
rx.exceptions.MissingBackpressureException
![Page 201: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/201.jpg)
139Борьба с Backpressure
![Page 202: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/202.jpg)
• debounce, throttle
139Борьба с Backpressure
![Page 203: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/203.jpg)
• debounce, throttle
• window, buffer
139Борьба с Backpressure
![Page 204: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/204.jpg)
• debounce, throttle
• window, buffer
• onBackpressureBuffer
139Борьба с Backpressure
![Page 205: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/205.jpg)
• debounce, throttle
• window, buffer
• onBackpressureBuffer
• onBackpressureDrop
139Борьба с Backpressure
![Page 206: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/206.jpg)
140
![Page 207: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/207.jpg)
141
![Page 208: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/208.jpg)
Âñåãäà äóìàéòå î òîì, ñêîëüêî ýëåìåíòîâ âàì íóæíî
îò Observable
![Page 209: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/209.jpg)
Êàê äóìàòü, èñïîëüçóÿ RxJava?
![Page 210: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/210.jpg)
Как инженер
![Page 211: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/211.jpg)
145Как инженер
![Page 212: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/212.jpg)
• íå áîéñÿ ðàñøèðÿòü ôðåéìâîðê
145Как инженер
![Page 213: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/213.jpg)
• íå áîéñÿ ðàñøèðÿòü ôðåéìâîðê
• ïîíèìàé, êàê îí ðàáîòàåò âíóòðè
145Как инженер
![Page 214: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/214.jpg)
146DoOnNextAsync
![Page 215: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/215.jpg)
• doOnNext == ñàéä ýôôåêò
146DoOnNextAsync
![Page 216: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/216.jpg)
• doOnNext == ñàéä ýôôåêò
• íå áëîêèðîâàòü âûïîëíåíèå ðîäèòåëÿ
146DoOnNextAsync
![Page 217: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/217.jpg)
• doOnNext == ñàéä ýôôåêò
• íå áëîêèðîâàòü âûïîëíåíèå ðîäèòåëÿ
• áûë ïðèâÿçàí ê æèçíåííîìó öèêëó ðîäèòåëÿ
146DoOnNextAsync
![Page 218: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/218.jpg)
• doOnNext == ñàéä ýôôåêò
• íå áëîêèðîâàòü âûïîëíåíèå ðîäèòåëÿ
• áûë ïðèâÿçàí ê æèçíåííîìó öèêëó ðîäèòåëÿ
• íå ÷åðåç Subjects
146DoOnNextAsync
![Page 219: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/219.jpg)
147
userDbChanges .map(this!::doRequest) .doOnNext(resp 0-> { globalSubscription = createCacheObs(resp) .subscribe(); }) .map(this!::doAnotherRequest);
![Page 220: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/220.jpg)
148
userDbChanges .map(this!::doRequest) .doOnNext(resp 0-> { globalSubscription = createCacheObs(resp) .subscribe(); }) .map(this!::doAnotherRequest);
![Page 221: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/221.jpg)
149
userDbChanges .map(this!::doRequest) .lift(new DoOnNextAsyncG<>(this!::cacheObs)) .map(this!::doAnotherRequest);
![Page 222: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/222.jpg)
150
userDbChanges .map(this!::doRequest) .lift(new DoOnNextAsyncG<>(this!::cacheObs)) .map(this!::doAnotherRequest);
![Page 223: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/223.jpg)
151
class DoOnNextAsync<F, T> implements Observable.Operator<F, F> { private final Func1<F, Observable<T9>> nested; public DoOnNextAsync(Func1<F, Observable<T9>> func) { this.nested = func; } !//больше кода дальше
![Page 224: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/224.jpg)
152
class DoOnNextAsync<F, T> implements Observable.Operator<F, F> { private final Func1<F, Observable<T9>> nested; public DoOnNextAsync(Func1<F, Observable<T9>> func) { this.nested = func; } !//больше кода дальше
![Page 225: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/225.jpg)
153
class DoOnNextAsync<F, T> implements Observable.Operator<F, F> { private final Func1<F, Observable<T9>> nested; public DoOnNextAsync(Func1<F, Observable<T9>> func) { this.nested = func; } !//больше кода дальше
![Page 226: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/226.jpg)
154
@Overridepublic Subscriber<? super F> call(Subscriber<? super F> subscriber) { return new Subscriber<F>() { @Override public void onNext(F next) { if (!subscriber.isUnsubscribed()) { Subscription s = nested.call(next).subscribe(); subscriber.add(s); } }
!//тривиальные onError и onCompleted здесь };}
![Page 227: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/227.jpg)
155
@Overridepublic Subscriber<? super F> call(Subscriber<? super F> subscriber) { return new Subscriber<F>() { @Override public void onNext(F next) { if (!subscriber.isUnsubscribed()) { Subscription s = nested.call(next).subscribe(); subscriber.add(s); } }
!//тривиальные onError и onCompleted здесь };}
![Page 228: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/228.jpg)
156
@Overridepublic Subscriber<? super F> call(Subscriber<? super F> subscriber) { return new Subscriber<F>() { @Override public void onNext(F next) { if (!subscriber.isUnsubscribed()) { Subscription s = nested.call(next).subscribe(); subscriber.add(s); } }
!//тривиальные onError и onCompleted здесь };}
![Page 229: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/229.jpg)
157
@Overridepublic Subscriber<? super F> call(Subscriber<? super F> subscriber) { return new Subscriber<F>() { @Override public void onNext(F next) { if (!subscriber.isUnsubscribed()) { Subscription s = nested.call(next).subscribe(); subscriber.add(s); } }
!//тривиальные onError и onCompleted здесь };}
![Page 230: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/230.jpg)
158
@Overridepublic Subscriber<? super F> call(Subscriber<? super F> subscriber) { return new Subscriber<F>() { @Override public void onNext(F next) { if (!subscriber.isUnsubscribed()) { Subscription s = nested.call(next).subscribe(); subscriber.add(s); } }
!//тривиальные onError и onCompleted здесь };}
![Page 231: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/231.jpg)
• Operator, lift,
• subscribeOn, observeOn
• nest, defer, create
159Понимай, как работает внутри
![Page 232: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/232.jpg)
Думай реактивно
![Page 233: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/233.jpg)
161Думать реактивно
![Page 234: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/234.jpg)
• ñîåäèíÿòü èìïåðàòèâíûé è ðåàêòèâíûé ìèð
161Думать реактивно
![Page 235: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/235.jpg)
• ñîåäèíÿòü èìïåðàòèâíûé è ðåàêòèâíûé ìèð
• íå èñïîëüçîâàòü ñàáäæåêòû
161Думать реактивно
![Page 236: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/236.jpg)
• ñîåäèíÿòü èìïåðàòèâíûé è ðåàêòèâíûé ìèð
• íå èñïîëüçîâàòü ñàáäæåêòû
• îïèñûâàòü, «êàê äåëàòü», à íå «÷òî äåëàòü»
161Думать реактивно
![Page 237: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/237.jpg)
162AutoLoadingRecyclerView
![Page 238: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/238.jpg)
• íàó÷èòü RecycerView àâòîïîäãðóçêå
162AutoLoadingRecyclerView
![Page 239: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/239.jpg)
• íàó÷èòü RecycerView àâòîïîäãðóçêå
• ñäåëàòü ñ ïîìîùüþ RxJava
162AutoLoadingRecyclerView
![Page 240: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/240.jpg)
• íàó÷èòü RecycerView àâòîïîäãðóçêå
• ñäåëàòü ñ ïîìîùüþ RxJava
• â ðåàêòèâíîì ñòèëå
162AutoLoadingRecyclerView
![Page 241: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/241.jpg)
163
public class AutoLoadingRecyclerView<T> extends RecyclerView { protected PublishSubject<Pair<Integer, Integer9>> scrollLoadingChannel = PublishSubject.create(); protected void startScrollingChannel() { addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (shouldLoad()) { int offset = getAdapter().getItemCount(); scrollLoadingChannel.onNext(new Pair(offset, limit)); } } }); }
![Page 242: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/242.jpg)
164
public class AutoLoadingRecyclerView<T> extends RecyclerView { protected PublishSubject<Pair<Integer, Integer9>> scrollLoadingChannel = PublishSubject.create(); protected void startScrollingChannel() { addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (shouldLoad()) { int offset = getAdapter().getItemCount(); scrollLoadingChannel.onNext(new Pair(offset, limit)); } } }); }
![Page 243: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/243.jpg)
165
public class AutoLoadingRecyclerView<T> extends RecyclerView { protected PublishSubject<Pair<Integer, Integer9>> scrollLoadingChannel = PublishSubject.create(); protected void startScrollingChannel() { addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (shouldLoad()) { int offset = getAdapter().getItemCount(); scrollLoadingChannel.onNext(new Pair(offset, limit)); } } }); }
![Page 244: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/244.jpg)
166
public class AutoLoadingRecyclerView<T> extends RecyclerView { protected PublishSubject<Pair<Integer, Integer9>> scrollLoadingChannel = PublishSubject.create(); protected void startScrollingChannel() { addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (shouldLoad()) { int offset = getAdapter().getItemCount(); scrollLoadingChannel.onNext(new Pair(offset, limit)); } } }); }
![Page 245: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/245.jpg)
167
public class AutoLoadingRecyclerView<T> extends RecyclerView { protected PublishSubject<Pair<Integer, Integer9>> scrollLoadingChannel = PublishSubject.create(); protected void startScrollingChannel() { addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (shouldLoad()) { int offset = getAdapter().getItemCount(); scrollLoadingChannel.onNext(new Pair(offset, limit)); } } }); }
![Page 246: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/246.jpg)
168
public class AutoLoadingRecyclerView<T> extends RecyclerView { protected PublishSubject<OffsetAndLimit> scrollLoadingChannel = PublishSubject.create(); protected Subscription loadNewItemsSubscription; protected Subscription subscribeToLoadingChannelSubscription;
![Page 247: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/247.jpg)
169
public class AutoLoadingRecyclerView<T> extends RecyclerView { protected PublishSubject<OffsetAndLimit> scrollLoadingChannel = PublishSubject.create(); protected Subscription loadNewItemsSubscription; protected Subscription subscribeToLoadingChannelSubscription;
![Page 248: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/248.jpg)
170
public class AutoLoadingRecyclerView<T> extends RecyclerView { protected PublishSubject<OffsetAndLimit> scrollLoadingChannel = PublishSubject.create(); protected Subscription loadNewItemsSubscription; protected Subscription subscribeToLoadingChannelSubscription;
![Page 249: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/249.jpg)
171
private static Observable<Integer>getScrollObservable(RecyclerView recyclerView, int limit) { return Observable.create(subscriber 0-> { final RecyclerView.OnScrollListener sl = new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!subscriber.isUnsubscribed() !&& shouldLoad()) { subscriber.onNext(recyclerView.getAdapter().getItemCount()); } } }; recyclerView.addOnScrollListener(sl); subscriber.add(Subscriptions.create(() 0-> recyclerView.removeOnScrollListener(sl))); });}
![Page 250: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/250.jpg)
172
private static Observable<Integer>getScrollObservable(RecyclerView recyclerView, int limit) { return Observable.create(subscriber 0-> { final RecyclerView.OnScrollListener sl = new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!subscriber.isUnsubscribed() !&& shouldLoad()) { subscriber.onNext(recyclerView.getAdapter().getItemCount()); } } }; recyclerView.addOnScrollListener(sl); subscriber.add(Subscriptions.create(() 0-> recyclerView.removeOnScrollListener(sl))); });}
![Page 251: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/251.jpg)
173
private static Observable<Integer>getScrollObservable(RecyclerView recyclerView, int limit) { return Observable.create(subscriber 0-> { final RecyclerView.OnScrollListener sl = new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!subscriber.isUnsubscribed() !&& shouldLoad()) { subscriber.onNext(recyclerView.getAdapter().getItemCount()); } } }; recyclerView.addOnScrollListener(sl); subscriber.add(Subscriptions.create(() 0-> recyclerView.removeOnScrollListener(sl))); });}
![Page 252: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/252.jpg)
174
private static Observable<Integer>getScrollObservable(RecyclerView recyclerView, int limit) { return Observable.create(subscriber 0-> { final RecyclerView.OnScrollListener sl = new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!subscriber.isUnsubscribed() !&& shouldLoad()) { subscriber.onNext(recyclerView.getAdapter().getItemCount()); } } }; recyclerView.addOnScrollListener(sl); subscriber.add(Subscriptions.create(() 0-> recyclerView.removeOnScrollListener(sl))); });}
![Page 253: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/253.jpg)
175
private static Observable<Integer>getScrollObservable(RecyclerView recyclerView, int limit) { return Observable.create(subscriber 0-> { final RecyclerView.OnScrollListener sl = new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!subscriber.isUnsubscribed() !&& shouldLoad()) { subscriber.onNext(recyclerView.getAdapter().getItemCount()); } } }; recyclerView.addOnScrollListener(sl); subscriber.add(Subscriptions.create(() 0-> recyclerView.removeOnScrollListener(sl))); });}
![Page 254: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/254.jpg)
176
private static Observable<Integer>getScrollObservable(RecyclerView recyclerView, int limit) { return Observable.create(subscriber 0-> { final RecyclerView.OnScrollListener sl = new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!subscriber.isUnsubscribed() !&& shouldLoad()) { subscriber.onNext(recyclerView.getAdapter().getItemCount()); } } }; recyclerView.addOnScrollListener(sl); subscriber.add(Subscriptions.create(() 0-> recyclerView.removeOnScrollListener(sl))); });}
![Page 255: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/255.jpg)
177
getScrollObservable() .distinctUntilChanged() .switchMap(offset 0-> getLoadingObservable(offset)) .subscribeOn(Schedulers .from(BackgroundExecutor.getSafeBackgroundExecutor()) ) .observeOn(AndroidSchedulers.mainThread()) .subscribe(loadNewItemsSubscriber);
![Page 256: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/256.jpg)
178
getScrollObservable() .distinctUntilChanged() .switchMap(offset 0-> getLoadingObservable(offset)) .subscribeOn(Schedulers .from(BackgroundExecutor.getSafeBackgroundExecutor()) ) .observeOn(AndroidSchedulers.mainThread()) .subscribe(loadNewItemsSubscriber);
![Page 257: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/257.jpg)
179
getScrollObservable() .distinctUntilChanged() .switchMap(offset 0-> getLoadingObservable(offset)) .subscribeOn(Schedulers .from(BackgroundExecutor.getSafeBackgroundExecutor()) ) .observeOn(AndroidSchedulers.mainThread()) .subscribe(loadNewItemsSubscriber);
![Page 258: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/258.jpg)
180
getScrollObservable() .distinctUntilChanged() .switchMap(offset 0-> getLoadingObservable(offset)) .subscribeOn(Schedulers .from(BackgroundExecutor.getSafeBackgroundExecutor()) ) .observeOn(AndroidSchedulers.mainThread()) .subscribe(loadNewItemsSubscriber);
![Page 259: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/259.jpg)
181
getScrollObservable() .distinctUntilChanged() .switchMap(offset 0-> getLoadingObservable(offset)) .subscribeOn(Schedulers .from(BackgroundExecutor.getSafeBackgroundExecutor()) ) .observeOn(AndroidSchedulers.mainThread()) .subscribe(loadNewItemsSubscriber);
![Page 260: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/260.jpg)
182
getScrollObservable() .distinctUntilChanged() .switchMap(offset 0-> getLoadingObservable(offset)) .subscribeOn(Schedulers .from(BackgroundExecutor.getSafeBackgroundExecutor()) ) .observeOn(AndroidSchedulers.mainThread()) .subscribe(loadNewItemsSubscriber);
![Page 261: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/261.jpg)
183Думать реактивно
![Page 262: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/262.jpg)
• èñïîëüçîâàòü ñòàíäàðòíûå ñðåäñòâà RxJava
183Думать реактивно
![Page 263: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/263.jpg)
• èñïîëüçîâàòü ñòàíäàðòíûå ñðåäñòâà RxJava
• íî íå ñàáäæåêòû
183Думать реактивно
![Page 264: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/264.jpg)
• èñïîëüçîâàòü ñòàíäàðòíûå ñðåäñòâà RxJava
• íî íå ñàáäæåêòû
• ïðè íåîáõîäèìîñòè – ïèñàòü ñâîå
183Думать реактивно
![Page 265: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/265.jpg)
• èñïîëüçîâàòü ñòàíäàðòíûå ñðåäñòâà RxJava
• íî íå ñàáäæåêòû
• ïðè íåîáõîäèìîñòè – ïèñàòü ñâîå
• îáîðà÷èâàòü ñîñòîÿíèå â Observable
183Думать реактивно
![Page 266: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/266.jpg)
• èñïîëüçîâàòü ñòàíäàðòíûå ñðåäñòâà RxJava
• íî íå ñàáäæåêòû
• ïðè íåîáõîäèìîñòè – ïèñàòü ñâîå
• îáîðà÷èâàòü ñîñòîÿíèå â Observable
• ñòàðàòüñÿ è íå ñäàâàòüñÿ
183Думать реактивно
![Page 267: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/267.jpg)
184The Art of Rx
![Page 268: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/268.jpg)
• äóìàòü î
184The Art of Rx
![Page 269: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/269.jpg)
• äóìàòü î
• î êîíòðàêòàõ
184The Art of Rx
![Page 270: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/270.jpg)
• äóìàòü î
• î êîíòðàêòàõ
• î òðåäàõ
184The Art of Rx
![Page 271: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/271.jpg)
• äóìàòü î
• î êîíòðàêòàõ
• î òðåäàõ
• î êîëè÷åñòâå ýëåìåíòîâ
184The Art of Rx
![Page 272: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/272.jpg)
• äóìàòü î
• î êîíòðàêòàõ
• î òðåäàõ
• î êîëè÷åñòâå ýëåìåíòîâ
• äóìàòü êàê
184The Art of Rx
![Page 273: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/273.jpg)
• äóìàòü î
• î êîíòðàêòàõ
• î òðåäàõ
• î êîëè÷åñòâå ýëåìåíòîâ
• äóìàòü êàê
• èíæåíåð
184The Art of Rx
![Page 274: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/274.jpg)
• äóìàòü î
• î êîíòðàêòàõ
• î òðåäàõ
• î êîëè÷åñòâå ýëåìåíòîâ
• äóìàòü êàê
• èíæåíåð
• ðåàêòèâíî
184The Art of Rx
![Page 275: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/275.jpg)
Ñòàòü ïðîôåññèîíàëîì – íåïðîñòî
![Page 276: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/276.jpg)
Íå ëåíèòåñü
![Page 277: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/277.jpg)
Äóìàéòå ìíîãî
![Page 278: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/278.jpg)
Äóìàéòå ìíîãî Î âàæíûõ âåùàõ
![Page 279: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/279.jpg)
189
Ìàëüêîâ Ìàòâåé
Ñïàñèáî
matveyka_jj
![Page 280: The Art of Rxpublic.jugru.org/mobius/2016/spb/day_1/track_1/malkovrx.pdf · •ýíåðãîïîòðåáëåíèå • ïëàâíîñòü èíòåðôåéñà (60 fps) • ôðàãìåíòàöèÿ](https://reader034.fdocument.pub/reader034/viewer/2022052015/602d41e8d125f451391690f6/html5/thumbnails/280.jpg)
Q & A