狠狠撸
Submit Search
2015 07-23 Tokyo Realm Meetup
?
6 likes
?
1,470 views
Niko Yuwono
Follow
Realm Meetup presentation about RxJava at SanSan Office (Shibuya, Tokyo)
Read less
Read more
1 of 15
Download now
More Related Content
2015 07-23 Tokyo Realm Meetup
1.
Copyright 2014 Shiroyagi
Corporation. All rights reserved. 2015-07-23 Realm Meetup 白ヤギコーポレーション Shiroyagi Corporation Niko Adrianus Yuwono
2.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 2 自己紹介 Niko Adrianus Yuwono Android Developer Github : https://github.com/NAYOSO インドネシアから来ました!
3.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 3 300万テーマから選べるニュースアプリ 1 好きなテーマを探す 2 フォローする 3 毎日ニュースが届く 使い方は簡単! ベストアプリにも選ばれた「あなた色に染まる」ニュースアプリ
4.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 4 RxJava RxJavaはAsynchronousプログラミングのAPIです。 ObservablesでAsynchronousデータの流れを表しま す。Observablesも色んなオペレータがあって、オペ レータでObservableをフィルター、選択、変換、構 成、そして組み合わせすることができます。
5.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 5 Observableとは? ?ObservableというObjectはタスクが終わったあとに Subscriberに通知して、SubscriberはObservableが発 するものを操作します。 ?Observableは一つのタスクを待たずにSubscriberを 使って、SubscriberがObservableを監視して、 Observableのタスクが終わったら、Observableの結果 をSubscriberにパスします。そのように、他のタスクを ブロックしないので、複数のタスクを同時に操作すること ができます。
6.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 6 Observableとは? Observable .create(subscriber -> subscriber.onNext("カメリオ")) .subscribe(text -> Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT)); このコードで「カメリオ」Stringを発するObservableを作っ て、SubscriberがそのStringを受け取って、そのStringか らToastを表示します。
7.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 7 Observableを変換する Observableを変換する機能は多いですが、以下の三つの機能 が最も採用されていると思います: - map():Mapという機能はObservableが発するものを変換 して、同じタイプのものをreturnするか別のタイプのものも returnすることができます。 - ?atMap() : FlatMapという機能はObservableが発するもの から他のObservableを作って、元のObservableをその新し いObservableに変換します。 - switchMap() : SwitchMapという機能はFlatMapに似てい るのですが、SwitchMapは一番新しいObservableだけを操作 します。
8.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 8 Mapの例 Observable. create(subscriber -> subscriber.onNext("カメリオ")) .map(text -> text + " Android"); このコードでObservableが「カメリオ」Stringを発して、 Map機能がそのStringを変換して、「 Android」Stringを 連結して、最後にObservableが「カメリオ Android」を 発します。
9.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 9 Observableをフィルターする Observableが発するものもフィルタすることができます。 例えば: Observable.from(new String[]{"Tokyo", "Osaka", "Jakarta", "Kanazawa"}) .?lter(new Func1<String, Boolean>() { @Override public Boolean call(String text) { return cityOfJapanList.contains(text); } })
10.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 10 AndroidのActivity/Fragment Lifecycleに関して Androidアプリは普通のJavaアプリと違って、Activity/ FragmentのLifecycleがあります。 例えばサーバーから取ったデータをUIに表示しますが、そ れはActivity/Fragmentがまだアクティブな状態の間だけ 可能です。なので、エラーを防ぐ為にActivity/Fragment が破壊される前にObservableからunsubscribeしてくださ い。
11.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 11 Unsubscribeの例 @Override protected void onDestroy() { helloSubscription.unsubscribe(); super.onDestroy(); }
12.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 12 Activity/Fragment Lifecycle Observable<String> activityBindedObservable = Observable.create(subscriber -> subscriber.onNext("Hello RxAndroid")) .map(text -> text.hashCode()) .map(hashcode -> String.valueOf(hashcode)); AppObservable.bindActivity(this, activityBindedObservable). subscribe(text -> Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT)); 幸いにもこのケースの為にHelper機能があります。ObservableのSubscriber を登録する時にAppObservable.bindActivity()/bindFragment()という機能 を使って、その機能がActivity/Fragmentが破壊される前にそのObservable をunsubscribeします。そうするとObservableがSubscriberに通知しません。
13.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 13 Threadに関して もしObservableにどんなThreadでsubscribeするか、も しくはobserveするかを特定しない場合に、Observableが タスクを行うか、もしくは結果をパスする時にAndroidの Main Threadを使います。私の意見では、それはあまり良 くないことと考えています。全部のタスクがMain Thread で行われたらアプリが重くなり、ユーザーからしてもあま りよくないので、subscribeOn()とobserveOn()機能を 使って、Threadを特定してください。 例えば、subscribeOn(Schedulers.io()) と observeOn(AndroidSchedulers.mainThread()).
14.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 14 Realmと連携 RealmはRxJavaの公式サポートはまだまだないですが、 RealmのIssue一覧でAsync Queryについて話があるので、 多分これからRxJavaのサポートもあります。 ! RxJavaとRealmの連携の問題は? RealmObjectとRealmResultsは一つのThreadから他の Threadにパス出来ないです。 例えば、Background ThreadでQueryしたら、UI Thread で使えないです。
15.
Copyright 2015 Shiroyagi
Corporation. All rights reserved. 機密 15 Question?
Download