Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ⴱ䗰罏ךך 3Y+BWB 랲䊛峔 吳䒭⠓爡'BCMJD !IZESBLFDBU
Slide 2
Slide 2 text
3Y+BWB ˖ 3Y 3FBDUJWF&YUFOTJPO ך+BWB㹋鄲
Slide 3
Slide 3 text
3Y+BWB ˖ 3Y 3FBDUJWF&YUFOTJPO ך+BWB㹋鄲 3FBDUJWF
Slide 4
Slide 4 text
3FBDUJWF1SPHSBNNJOHהכ ˑBQSPHSBNNJOHQBSBEJHNPSJFOUFEBSPVOEEBUBGMPXTBOEUIF QSPQBHBUJPOPGDIBOHF˒ 3FBDUJWFQSPHSBNNJOH8JLJQFEJB IUUQTFOXJLJQFEJBPSHX JOEFYQIQ UJUMF3FBDUJWF@QSPHSBNNJOHPMEJE ˑ3FBDUJWFQSPHSBNTBMTPNBJOUBJOBDPOUJOVPVTJOUFSBDUJPOXJUI UIFJSFOWJSPONFOU CVUBUBTQFFEXIJDIJTEFUFSNJOFECZUIF FOWJSPONFOU OPUUIFQSPHSBNJUTFMG˒ 3FBDUJWFQSPHSBNNJOH8JLJQFEJB IUUQTFOXJLJQFEJBPSHXJLJ3FBDUJWF@QSPHSBNNJOH
Slide 5
Slide 5 text
3FBDUJWF1SPHSBNNJOHהכ ˑ3FBDUJWFQSPHSBNTBMTPNBJOUBJOBDPOUJOVPVTJOUFSBDUJPOXJUI UIFJSFOWJSPONFOU CVUBUBTQFFEXIJDIJTEFUFSNJOFECZUIF FOWJSPONFOU OPUUIFQSPHSBNJUTFMG˒ 3FBDUJWFQSPHSBNNJOH8JLJQFEJB IUUQTFOXJLJQFEJBPSHXJLJ3FBDUJWF@QSPHSBNNJOH ˑBQSPHSBNNJOHQBSBEJHNPSJFOUFEBSPVOEEBUBGMPXTBOEUIF QSPQBHBUJPOPGDIBOHF˒ 3FBDUJWFQSPHSBNNJOH8JLJQFEJB IUUQTFOXJLJQFEJBPSHX JOEFYQIQ UJUMF3FBDUJWF@QSPHSBNNJOHPMEJE
Slide 6
Slide 6 text
3FBDUJWF1SPHSBNNJOHהכ ˑBQSPHSBNNJOHQBSBEJHNPSJFOUFEBSPVOEEBUBGMPXTBOEUIF QSPQBHBUJPOPGDIBOHF˒ 3FBDUJWFQSPHSBNNJOH8JLJQFEJB IUUQTFOXJLJQFEJBPSHXJLJ3FBDUJWF@QSPHSBNNJOH 5SBOTGPSNBUJPOBM 㢌䳔㘗 㢌侧ח㼎ׅ乼⡲אא鎸鶢
Slide 7
Slide 7 text
3FBDUJWF1SPHSBNNJOHהכ ˑBQSPHSBNNJOHQBSBEJHNPSJFOUFEBSPVOEEBUBGMPXTBOEUIF QSPQBHBUJPOPGDIBOHF˒ 3FBDUJWFQSPHSBNNJOH8JLJQFEJB IUUQTFOXJLJQFEJBPSHXJLJ3FBDUJWF@QSPHSBNNJOH 5SBOTGPSNBUJPOBM 㢌䳔㘗 㢌侧ח㼎ׅ乼⡲אא鎸鶢 3FBDUJWF ر٦ةؿٗ٦㹑鎉׃גַծ㢌刿⠗乄ׇׁ
Slide 8
Slide 8 text
5SBOTGPSNBUJPOBM 3FBDUJWF1SPHSBNNJOHהכ A = 2 B = 3 C = (A + 1) x (B - 1)
Slide 9
Slide 9 text
3FBDUJWF1SPHSBNNJOHהכ A = 2 B = 3 C = (A + 1) x (B - 1) 3FBDUJWF Y " # $ 5SBOTGPSNBUJPOBM
Slide 10
Slide 10 text
3FBDUJWF1SPHSBNNJOHהכ A = 2 B = 3 C = (A + 1) x (B - 1) Y " # $ 5SBOTGPSNBUJPOBM 3FBDUJWF
Slide 11
Slide 11 text
3FBDUJWF1SPHSBNNJOHהכ A = 2 B = 3 C = (A + 1) x (B - 1) Y " # $ 5SBOTGPSNBUJPOBM 3FBDUJWF
Slide 12
Slide 12 text
3FBDUJWF1SPHSBNNJOHהכ A = 2 B = 3 C = (A + 1) x (B - 1) A = 3 Y " # $ 5SBOTGPSNBUJPOBM 3FBDUJWF
Slide 13
Slide 13 text
3FBDUJWF1SPHSBNNJOHהכ A = 2 B = 3 C = (A + 1) x (B - 1) A = 3 Y " # $ 5SBOTGPSNBUJPOBM 3FBDUJWF
Slide 14
Slide 14 text
3FBDUJWF1SPHSBNNJOHהכ A = 2 B = 3 C = (A + 1) x (B - 1) A = 3 Y " # $ 5SBOTGPSNBUJPOBM 3FBDUJWF
Slide 15
Slide 15 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ network.getDataA();
Slide 16
Slide 16 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ network.getDataA(new NetworkCall.Listener() { @Override public void success(String data) { } });
Slide 17
Slide 17 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ network.getDataA(new NetworkCall.Listener() { @Override public void success(String data) { network.getDataB(data); } });
Slide 18
Slide 18 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ network.getDataA(new NetworkCall.Listener() { @Override public void success(String data) { network.getDataB(data, new NetworkCall.Listener() { @Override public void success(String data) { } }); } });
Slide 19
Slide 19 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ network.getDataA(new NetworkCall.Listener() { @Override public void success(String data) { network.getDataB(data, new NetworkCall.Listener() { @Override public void success(String data) { tv.setText(data); } }); } });
Slide 20
Slide 20 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ network.getDataA(new NetworkCall.Listener() { @Override public void success(String data) { network.getDataB(data, new NetworkCall.Listener() { @Override public void success(String data) { tv.setText(data); } @Override public void failure(Throwable t) {} }); } @Override public void failure(Throwable t) {} });
Slide 21
Slide 21 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ network.getDataA(new NetworkCall.Listener() { @Override public void success(String data) { network.getDataB(data, new NetworkCall.Listener() { @Override public void success(String data) { if (!isDestroyed()) { tv.setText(data); } } @Override public void failure(Throwable t) {} }); } @Override public void failure(Throwable t) {} });
Slide 22
Slide 22 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ network.getDataA(new NetworkCall.Listener() { @Override public void success(String data) { network.getDataB(data, new NetworkCall.Listener() { @Override public void success(String data) { runOnUiThread(() -> { if (!isDestroyed()) { tv.setText(data); } }); } @Override public void failure(Throwable t) {} }); } @Override public void failure(Throwable t) {} });
Slide 23
Slide 23 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ
Slide 24
Slide 24 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ
Slide 25
Slide 25 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ
Slide 26
Slide 26 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ
Slide 27
Slide 27 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ
Slide 28
Slide 28 text
ז"OESPJE،فٔ涪ד31ָ岣湡ׁךַ
Slide 29
Slide 29 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 30
Slide 30 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 31
Slide 31 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 32
Slide 32 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 33
Slide 33 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM subscribe
Slide 34
Slide 34 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 35
Slide 35 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 36
Slide 36 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 37
Slide 37 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM completed
Slide 38
Slide 38 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 39
Slide 39 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM Observable subscribe(Subscriber)
Slide 40
Slide 40 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM Observable subscribe(Subscriber) Subscriber onNext() onCompleted() onError()
Slide 41
Slide 41 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 42
Slide 42 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 43
Slide 43 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM
Slide 44
Slide 44 text
3FBDUJWF&YUFOTJPO 3Y הכ BMJCSBSZGPSDPNQPTJOHBTZODISPOPVTBOEFWFOUCBTFE QSPHSBNTVTJOHPCTFSWBCMFTFRVFODFT˒ 3FBDUJWF9*OUSP IUUQSFBDUJWFYJPJOUSPIUNM Operator
Slide 45
Slide 45 text
3FBDUJWF&YUFOTJPO 3Y הכ 1 2 3 4 5 6 < > GPSxJO JGx % 2 == 0UIFO QVTIx * x UP list FOE FOE SFUVSOlist
Slide 46
Slide 46 text
3FBDUJWF&YUFOTJPO 3Y הכ 1 2 3 4 5 6 < > GJMUFS x % 2 == 0 NBQ x -> x * x
Slide 47
Slide 47 text
3FBDUJWF&YUFOTJPO 3Y הכ 1 2 3 4 5 6
Slide 48
Slide 48 text
3FBDUJWF&YUFOTJPO 3Y הכ 1 2 3 4 5 6 GJMUFS x % 2 == 0 NBQ x -> x * x
Slide 49
Slide 49 text
3FBDUJWF&YUFOTJPO 3Y הכ 1 2 3 4 5 6 GJMUFS x % 2 == 0 NBQ x -> x * x 4 16 36
Slide 50
Slide 50 text
3FBDUJWF&YUFOTJPO 3Y הכ 4 16 36 Observable.just(1, 2, 3, 4, 5, 6) .filter(x -> x % 2 == 0) .map(x -> x * x) .subscribe(System.out ::println);
Slide 51
Slide 51 text
˖ ꬊず劍Ⳣ椚 ˖ 6*؎كٝزⳢ椚 ˖ ꬊず劍Ⳣ椚6*؎كٝزⳢ椚 3Y+BWBד⡦ָדֹךַ
Slide 52
Slide 52 text
˖ ꬊず劍Ⳣ椚 ˖ 6*؎كٝزⳢ椚 ˖ ꬊず劍Ⳣ椚6*؎كٝزⳢ椚 3Y+BWBד⡦ָדֹךַ
Slide 53
Slide 53 text
3Y+BWBד⡦ָדֹךַ network.getDataA(new NetworkCall.Listener() { @Override public void success(String data) { network.getDataB(data, new NetworkCall.Listener() { @Override public void success(String data) { runOnUiThread(() -> { if (!isDestroyed()) { tv.setText(data); } }); } @Override public void failure(Throwable t) {} }); } @Override public void failure(Throwable t) {} });
Slide 54
Slide 54 text
network.getDataA(); 3Y+BWBד⡦ָדֹךַ
Slide 55
Slide 55 text
network.getDataA() .subscribe( data -> tv.setText(data), throwable -> Log.e(TAG, throwable.getMessage()) ); 3Y+BWBד⡦ָדֹךַ
Slide 56
Slide 56 text
network.getDataA() .flatMap(data -> network.getDataB(data)) .subscribe( data -> tv.setText(data), throwable -> Log.e(TAG, throwable.getMessage()) ); 3Y+BWBד⡦ָדֹךַ
Slide 57
Slide 57 text
network.getDataA() .subscribeOn(Schedulers.io()) .flatMap(data -> network.getDataB(data)) .subscribe( data -> tv.setText(data), throwable -> Log.e(TAG, throwable.getMessage()) ); 3Y+BWBד⡦ָדֹךַ
Slide 58
Slide 58 text
network.getDataA() .subscribeOn(Schedulers.io()) .flatMap(data -> network.getDataB(data)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( data -> tv.setText(data), throwable -> Log.e(TAG, throwable.getMessage()) ); 3Y+BWBד⡦ָדֹךַ
Slide 59
Slide 59 text
subscription = network.getDataA() .subscribeOn(Schedulers.io()) .flatMap(data -> network.getDataB(data)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( data -> tv.setText(data), throwable -> Log.e(TAG, throwable.getMessage()) ); 3Y+BWBד⡦ָדֹךַ
Slide 60
Slide 60 text
@Override public void onCreate(Bundle savedInstanceState) { … subscription = network.getDataA() .subscribeOn(Schedulers.io()) .flatMap(data -> network.getDataB(data)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( data -> tv.setText(data), throwable -> Log.e(TAG, throwable.getMessage()) ); } 3Y+BWBד⡦ָדֹךַ
Slide 61
Slide 61 text
@Override public void onCreate(Bundle savedInstanceState) { … subscription = network.getDataA() .subscribeOn(Schedulers.io()) .flatMap(data -> network.getDataB(data)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( data -> tv.setText(data), throwable -> Log.e(TAG, throwable.getMessage()) ); } @Override public void onDestroy() { super.onDestroy(); subscription.unsubscribe(); } 3Y+BWBד⡦ָדֹךַ
Slide 62
Slide 62 text
@Override public void onCreate(Bundle savedInstanceState) { … subscription = network.getDataA() .subscribeOn(Schedulers.io()) .flatMap(data -> network.getDataB(data)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( data -> tv.setText(data), throwable -> Log.e(TAG, throwable.getMessage()) ); } @Override public void onDestroy() { super.onDestroy(); subscription.unsubscribe(); } 3Y+BWBד⡦ָדֹךַ
Slide 63
Slide 63 text
3Y+BWBד⡦ָדֹךַ
Slide 64
Slide 64 text
˖ ꬊず劍Ⳣ椚 ˖ 6*؎كٝزⳢ椚 ˖ ꬊず劍Ⳣ椚6*؎كٝزⳢ椚 3Y+BWBד⡦ָדֹךַ
Slide 65
Slide 65 text
6*؎كٝزⳢ椚 ׅץגWBMJE㜥さך TVCNJUنةٝFOBCMFחׅ 3Y+BWBד⡦ָדֹךַ
Slide 66
Slide 66 text
8JUIPVU3Y+BWB private void setup() { input1.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { input1Valid = s.length() > 0; validate(); } }); … } private void validate() { button.setEnabled(input1Valid && input2Valid && input3Valid); } 3Y+BWBד⡦ָדֹךַ
Slide 67
Slide 67 text
8JUI3Y+BWB private void setup() { ArrayList> validators = new ArrayList <>(); validators.add(RxTextView.textChanges(input1).map(s -> s.length() > 0)); … Observable.combineLatest(validators, args -> { for (Object a : args) { if (!(Boolean) a) return false; } return true; }).subscribe(button ::setEnabled); } 3Y+BWBד⡦ָדֹךַ
Slide 68
Slide 68 text
8JUI3Y+BWB private void setup() { ArrayList> validators = new ArrayList <>(); validators.add(RxTextView.textChanges(input1).map(s -> s.length() > 0)); … Observable.combineLatest(validators, args -> { for (Object a : args) { if (!(Boolean) a) return false; } return true; }).subscribe(button ::setEnabled); } 3Y+BWBד⡦ָדֹךַ
Slide 69
Slide 69 text
8JUI3Y+BWB private void setup() { ArrayList> validators = new ArrayList <>(); validators.add(RxTextView.textChanges(input1).map(s -> s.length() > 0)); … Observable.combineLatest(validators, args -> { for (Object a : args) { if (!(Boolean) a) return false; } return true; }).subscribe(button ::setEnabled); } 3Y+BWBד⡦ָדֹךַ
Slide 70
Slide 70 text
8JUI3Y+BWB private void setup() { ArrayList> validators = new ArrayList <>(); validators.add(RxTextView.textChanges(input1).map(s -> s.length() > 0)); … Observable.combineLatest(validators, args -> { for (Object a : args) { if (!(Boolean) a) return false; } return true; }).subscribe(button ::setEnabled); } 3Y+BWBד⡦ָדֹךַ
Slide 71
Slide 71 text
3Y+BWBד⡦ָדֹךַ
Slide 72
Slide 72 text
˖ ꬊず劍Ⳣ椚 ˖ 6*؎كٝزⳢ椚 ˖ ꬊず劍Ⳣ椚6*؎كٝزⳢ椚 3Y+BWBד⡦ָדֹךַ
Slide 73
Slide 73 text
3Y+BWBד⡦ָדֹךַ ꬊず劍Ⳣ椚6*؎كٝزⳢ椚 ꬊず劍Ⳣ椚6*؎كٝزⳢ椚
Slide 74
Slide 74 text
3Y+BWBד⡦ָדֹךַ ꬊず劍Ⳣ椚6*؎كٝزⳢ椚 أؙٗ٦ָٕ⨡姺׃ꬊず 劍Ⳣ椚㨣ծأؙٗ٦ָٕ 㨣׃װ ؕؐٝزָחז 穠卓ָ邌爙ׁ
Slide 75
Slide 75 text
3Y+BWBד⡦ָדֹךַ ConnectableObservable idling = RxAbsListView.scrollEvents(listView) .map(event -> event.scrollState() == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) .distinctUntilChanged() .publish(); أؙٗ٦ٕך㨣⨡姺嗚濼ׅ0CTFSWBCMF
Slide 76
Slide 76 text
3Y+BWBד⡦ָדֹךַ ConnectableObservable idling = RxAbsListView.scrollEvents(listView) .map(event -> event.scrollState() == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) .distinctUntilChanged() .publish(); أؙٗ٦ٕך㨣⨡姺嗚濼ׅ0CTFSWBCMF
Slide 77
Slide 77 text
3Y+BWBד⡦ָדֹךַ
Slide 78
Slide 78 text
3Y+BWBד⡦ָדֹךַ أؙٗ٦ָٕ⨡姺׃ꬊず劍Ⳣ椚㨣ׅ final Subscription s = idling.startWith(true) .subscribe(l -> showLog("Success!"));
Slide 79
Slide 79 text
3Y+BWBד⡦ָדֹךַ أؙٗ٦ָٕ⨡姺׃ꬊず劍Ⳣ椚㨣ׅ final Subscription s = idling.startWith(true) .filter(b -> b) .subscribe(l -> showLog("Success!"));
Slide 80
Slide 80 text
3Y+BWBד⡦ָדֹךַ أؙٗ٦ָٕ⨡姺׃ꬊず劍Ⳣ椚㨣ׅ final Subscription s = idling.startWith(true) .filter(b -> b) .flatMap(aBool -> serivce.getData()) .subscribe(l -> showLog("Success!"));
Slide 81
Slide 81 text
3Y+BWBד⡦ָדֹךַ أؙٗ٦ָٕ㨣׃ꬊず劍Ⳣ椚⨡姺ׅ final Subscription s = idling.startWith(true) .filter(b -> b) .flatMap(aBool -> serivce.getData()) .subscribe(l -> showLog("Success!"));
Slide 82
Slide 82 text
3Y+BWBד⡦ָדֹךַ أؙٗ٦ָٕ㨣׃ꬊず劍Ⳣ椚⨡姺ׅ final Subscription s = idling.startWith(true) .filter(b -> b) .flatMap(aBool -> serivce.getData()) .takeUntil(idling.filter(b -> !b)) .repeatWhen(completes -> completes.switchMap( c -> idling.filter(b -> b))) .subscribe(l -> showLog("Success!"));
Slide 83
Slide 83 text
3Y+BWBד⡦ָדֹךַ أؙٗ٦ָٕ㨣׃ꬊず劍Ⳣ椚⨡姺ׅ final Subscription s = idling.startWith(true) .filter(b -> b) .flatMap(aBool -> serivce.getData()) .takeUntil(idling.filter(b -> !b)) .repeatWhen(completes -> completes.switchMap( c -> idling.filter(b -> b))) .subscribe(l -> showLog("Success!"));
Slide 84
Slide 84 text
3Y+BWBד⡦ָדֹךַ
Slide 85
Slide 85 text
3Y+BWBד⡦ָדֹךַ أؙٗ٦ָٕ⨡姺׃ⱄTVCTDSJCFׅ final Subscription s = idling.startWith(true) .filter(b -> b) .flatMap(aBool -> serivce.getData()) .takeUntil(idling.filter(b -> !b)) .repeatWhen(completes -> completes.switchMap( c -> idling.filter(b -> b))) .subscribe(l -> showLog("Success!"));
Slide 86
Slide 86 text
3Y+BWBד⡦ָדֹךַ
Slide 87
Slide 87 text
final Subscription s = idling.startWith(true) .filter(b -> b) .flatMap(aBool -> serivce.getData()) .takeUntil(idling.filter(b -> !b)) .repeatWhen(completes -> completes.switchMap( c -> idling.filter(b -> b))) .subscribe(l -> showLog("Success!")); 3Y+BWBד⡦ָדֹךַ 㹋遤ׅأٖحس䭷㹀ׅ
Slide 88
Slide 88 text
3Y+BWBד⡦ָדֹךַ 㹋遤ׅأٖحس䭷㹀ׅ final Subscription s = idling.startWith(true) .subscribeOn(Schedulers.io()) .filter(b -> b) .flatMap(aBool -> serivce.getData()) .takeUntil(idling.filter(b -> !b)) .repeatWhen(completes -> completes.switchMap( c -> idling.filter(b -> b))) .observeOn(AndroidSchedulers.mainThread()) .subscribe(l -> showLog("Success!"));
Slide 89
Slide 89 text
3Y+BWBד⡦ָדֹךַ ConnectableObservable idling = RxAbsListView.scrollEvents(listView) .map(event -> event.scrollState() == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) .distinctUntilChanged() .publish(); subscriptions.add(idling.connect()); subscriptions.add(idling.startWith(true) .subscribeOn(Schedulers.io()) .filter(b -> b) .flatMap(aBool -> serivce.getData()) .takeUntil(idling.filter(b -> !b)) .repeatWhen(completes -> completes.switchMap( c -> idling.filter(b -> b))) .observeOn(AndroidSchedulers.mainThread()) .subscribe(l -> showLog("Success!")));
Slide 90
Slide 90 text
ًٔحز ˖ ؎كٝزװꬊず劍Ⳣ椚ָ䪔ְװְׅ ˖ 朐䡾㢌侧ָ㼰זֻג幥 ˖ ر٦ةؿٗ٦ך鋅鸐׃ָ葺ֻז 3Y+BWBךًٔحزرًٔحز
Slide 91
Slide 91 text
ًٔحز ˖ ؎كٝزװꬊず劍Ⳣ椚ָ䪔ְװְׅ ˖ 朐䡾㢌侧ָ㼰זֻג幥 ˖ ر٦ةؿٗ٦ך鋅鸐׃ָ葺ֻז رًٔحز ˖ 湫䠬涸הכꣲזְ ˖ ⢪ְֿזׅחכ䢪ָ䗳銲 ˖ ➬穈椚鍑׃גְזְה縐ח䅹װְׅ 3Y+BWBךًٔحزرًٔحز
Slide 92
Slide 92 text
ז㷕统؝أزָ넝ְךַ
Slide 93
Slide 93 text
˖ ؔلٖ٦ةָֻׁ֮ ז㷕统؝أزָ넝ְךַ
Slide 94
Slide 94 text
˖ ؔلٖ٦ةָֻׁ֮ ז㷕统؝أزָ넝ְךַ all() amb() ambWith() and() asyncAction() asyncFunc() averageDouble() averageFloat() averageInteger() averageLong() buffer() cache() cast() chunkify() collect() combineLatest() concat() concatMap() concatWith() connect() contains() count() countLong() create() debounce() defaultIfEmpty() defer() deferFuture() deferCancellableFuture() delay() dematerialize() distinct() distinctUntilChanged() doOnCompleted() doOnEach() doOnError() doOnNext() doOnRequest() doOnSubscribe() doOnTerminate() doOnUnsubscribe() doWhile() elementAt() elementAtOrDefault() empty() error() exists() filter() finallyDo() first() firstOrDefault() flatMap() flatMapIterable() forEach() forIterable() from() fromAction() fromCallable() fromCancellableFuture() fromFunc0() fromFuture() fromRunnable() generate() generateAbsoluteTime() getIterator() groupBy() groupByUntil() groupJoin() ifThen() ignoreElements() interval() isEmpty() join() just() last() lastOrDefault()
Slide 95
Slide 95 text
˖ ؔلٖ٦ةָֻׁ֮ ˖ װװֿ׃ְ嚊䙀 ז㷕统؝أزָ넝ְךַ
Slide 96
Slide 96 text
˖ ؔلٖ٦ةָֻׁ֮ ˖ װװֿ׃ְ嚊䙀 ˖ )PU$PME0CTFSWBCMF ˖ 4DIFEVMFS ˖ 4VCTDSJQUJPO ˖ 4VCKFDU ˖ #BDLQSFTTVSF ז㷕统؝أزָ넝ְךַ
Slide 97
Slide 97 text
سًُؗٝز铣 ؔلٖ٦ةך⹛ֹ䗰ד椚鍑ׅ ؔلٖ٦ةךؕذ؞ٔ濼 ٓ؎ـٓٔⵃ欽ׅ 嚂׃ 3Y+BWBך㷕统岀
Slide 98
Slide 98 text
3FBDUJWF93Y+BWB8JLJ IUUQTHJUIVCDPN3FBDUJWF9 3Y+BWBXJLJ *OUSPEVDUJPOUP3Y IUUQXXXJOUSPUPSYDPN 3Y4BNQMFT IUUQSYXJLJXJLJEPUDPN TBNQMFT سًُؗٝز铣
Slide 99
Slide 99 text
3Y+4ד鑐ׅ ˖ &4 #BCFM ˖ IUUQTKTGJEEMFOFUIZESBLFDBUGUWQIO ؔلٖ٦ةך⹛ֹ䗰ד椚鍑ׅ
Slide 100
Slide 100 text
˖ $SFBUJOH ˖ 5SBOTGPSNJOH ˖ 'JMUFSJOH ˖ $PNCJOJOH ˖ &SSPS)BOEMJOH ˖ $POEJUJPOBMBOE#PPMFBO ˖ .BUIFNBUJDBMBOE"HHSFHBUF ؔلٖ٦ةךؕذ؞ٔ濼
Slide 101
Slide 101 text
א⟃♳ך0CTFSWBCMF⢪ְְ ̔$PNCJOJOH$POEJUJPOBM אך0CTFSWBCMFח׃ַ莆ָזְ ̔5SBOTGPSNJOH'JMUFSJOH 0CTFSWBCMF⡲ְ ̔$SFBUJOH ؔلٖ٦ةךؕذ؞ٔ濼 "%FDJTJPO5SFFPG0CTFSWBCMF0QFSBUPST IUUQSFBDUJWFYJPEPDVNFOUBUJPOPQFSBUPSTIUNM
Slide 102
Slide 102 text
˖ 0CTFSWBCMFDSFBUF ד0CTFSWBCMF⡲זְֿה☠ ˖ ְגְךךכٓ؎ـٓٔח֮ ˖ طحزٙ٦ؙ鸐⥋̔3FUSPGJU ˖ 42-̔42-#SJUF 0SNB ˖ 6*؎كٝز̔3Y#JOEJOH ˖ וֲ׃גזְ㜥さכ0CTFSWBCMFGSPN9 ⢪ֲ ˖ GSPN$BMMBCMF ˖ GSPN&NJUUFS ٓ؎ـٓٔⵃ欽ׅ
Slide 103
Slide 103 text
嚂׃ IUUQTMJEFTDPNSPCXPSNBMEFWFSZUIJOHJTBTUSFBN ˖ 걧ך⢪ְ倯ָ殯ז ˖ ֲתֻ剅ֽהֲ׃ְ ˖ 㔭BOESPJEKQ4MBDLפ IUUQTBOESPJEKQIFSPLVBQQDPN
Slide 104
Slide 104 text
˖ 3Y+BWB3$ ˖ 3FBDUJWF4USFBNTك٦أ ˖ 'JOBM3FMFBTFTDIFEVMFEBUUI0DU 3Y+BWBךַֿ
Slide 105
Slide 105 text
˖ 3Y+BWB3$ ˖ 3FBDUJWF4USFBNTك٦أ ˖ 'JOBM3FMFBTFTDIFEVMFEBUUI0DU 3Y+BWBךַֿ 3FBDUJWF4USFBNT
Slide 106
Slide 106 text
˖ +BWBדך垥彊⻉ KVD'MPX ˖ IUUQTDPNNVOJUZPSBDMFDPNEPDT%0$ ˖ 彊䬿׃גְٓ؎ـٓٔ ˖ "LLB4USFBNT ˖ 3FBDUPS ˖ 3Y+BWB 3FBDUJWF4USFBNT
Slide 107
Slide 107 text
˖ +BWBדך垥彊⻉ KVD'MPX ˖ IUUQTDPNNVOJUZPSBDMFDPNEPDT%0$ ˖ 彊䬿׃גְٓ؎ـٓٔ ˖ "LLB4USFBNT ˖ 3FBDUPS ˖ 3Y+BWB 3FBDUJWF4USFBNT ״أةٝت٦سח
Slide 108
Slide 108 text
˖ 3FBDUJWFQSPHSBNNJOH8JLJQFEJB UIFGSFFFODZDMPQFEJB IUUQTFOXJLJQFEJBPSHXJLJ3FBDUJWF@QSPHSBNNJOH ˖ ++6(ش؎زإىش٦ד3FBDUJWF4USFBNTחאְג涪邌׃ת׃ IUUQPLBQJFTIBUFCMPKQFOUSZ ˖ 3FBDUJWF9 IUUQSFBDUJWFYJP ˖ &YQMPSJOH3Y+BWBGPS"OESPJE (050DQI0DUPCFS IUUQTTQFBLFSEFDLDPNKBLFXIBSUPOFYQMPSJOHSYKBWBGPS BOESPJEHPUPDQIPDUPCFS ˖ 3FBDUJWF1SPHSBNNJOHXJUI+%,'MPX"1* IUUQTDPNNVOJUZPSBDMFDPNEPDT%0$ 罋
Slide 109
Slide 109 text
5IBOL:PV 랲䊛峔 吳䒭⠓爡'BCMJD !IZESBLFDBU https://github.com/hkurokawa https://speakerdeck.com/hkurokawa