Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Copyright 2014 Shiroyagi Corporation. All rights reserved.
2015-07-23
Realm Meetup
白ヤギコーポレーション
Shiroyagi Corporation
Niko ...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
2
自己紹介
Niko Adrianus Yuwono
Android Developer
Github : https...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
3
300万テーマから選べるニュースアプリ
1 好きなテーマを探す
2 フォローする
3 毎日ニュースが届く
使い方は簡...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
4
RxJava
RxJavaはAsynchronousプログラミングのAPIです。
ObservablesでAsync...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
5
Observableとは?
・ObservableというObjectはタスクが終わったあとに
Subscriberに...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
6
Observableとは?
Observable
.create(subscriber -> subscriber....
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
7
Observableを変換する
Observableを変換する機能は多いですが、以下の三つの機能
が最も採用されてい...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
8
Mapの例
Observable.
create(subscriber -> subscriber.onNext("...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
9
Observableをフィルターする
Observableが発するものもフィルタすることができます。
例えば:
Ob...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
10
AndroidのActivity/Fragment Lifecycleに関して
Androidアプリは普通のJav...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
11
Unsubscribeの例
@Override
protected void onDestroy() {
hell...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
12
Activity/Fragment Lifecycle
Observable<String> activityBi...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
13
Threadに関して
もしObservableにどんなThreadでsubscribeするか、も
しくはobser...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
14
Realmと連携
RealmはRxJavaの公式サポートはまだまだないですが、
RealmのIssue一覧でAsy...
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
15
Question?
Upcoming SlideShare
Loading in …5
×

2015 07-23 Tokyo Realm Meetup

1,278 views

Published on

Realm Meetup presentation about RxJava at SanSan Office (Shibuya, Tokyo)

Published in: Engineering
  • Be the first to comment

2015 07-23 Tokyo Realm Meetup

  1. 1. Copyright 2014 Shiroyagi Corporation. All rights reserved. 2015-07-23 Realm Meetup 白ヤギコーポレーション Shiroyagi Corporation Niko Adrianus Yuwono
  2. 2. Copyright 2015 Shiroyagi Corporation. All rights reserved. 機密 2 自己紹介 Niko Adrianus Yuwono Android Developer Github : https://github.com/NAYOSO インドネシアから来ました!
  3. 3. Copyright 2015 Shiroyagi Corporation. All rights reserved. 機密 3 300万テーマから選べるニュースアプリ 1 好きなテーマを探す 2 フォローする 3 毎日ニュースが届く 使い方は簡単! ベストアプリにも選ばれた「あなた色に染まる」ニュースアプリ
  4. 4. Copyright 2015 Shiroyagi Corporation. All rights reserved. 機密 4 RxJava RxJavaはAsynchronousプログラミングのAPIです。 ObservablesでAsynchronousデータの流れを表しま す。Observablesも色んなオペレータがあって、オペ レータでObservableをフィルター、選択、変換、構 成、そして組み合わせすることができます。
  5. 5. Copyright 2015 Shiroyagi Corporation. All rights reserved. 機密 5 Observableとは? ・ObservableというObjectはタスクが終わったあとに Subscriberに通知して、SubscriberはObservableが発 するものを操作します。 ・Observableは一つのタスクを待たずにSubscriberを 使って、SubscriberがObservableを監視して、 Observableのタスクが終わったら、Observableの結果 をSubscriberにパスします。そのように、他のタスクを ブロックしないので、複数のタスクを同時に操作すること ができます。
  6. 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. 7. Copyright 2015 Shiroyagi Corporation. All rights reserved. 機密 7 Observableを変換する Observableを変換する機能は多いですが、以下の三つの機能 が最も採用されていると思います: - map():Mapという機能はObservableが発するものを変換 して、同じタイプのものをreturnするか別のタイプのものも returnすることができます。 - flatMap() : FlatMapという機能はObservableが発するもの から他のObservableを作って、元のObservableをその新し いObservableに変換します。 - switchMap() : SwitchMapという機能はFlatMapに似てい るのですが、SwitchMapは一番新しいObservableだけを操作 します。
  8. 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. 9. Copyright 2015 Shiroyagi Corporation. All rights reserved. 機密 9 Observableをフィルターする Observableが発するものもフィルタすることができます。 例えば: Observable.from(new String[]{"Tokyo", "Osaka", "Jakarta", "Kanazawa"}) .filter(new Func1<String, Boolean>() { @Override public Boolean call(String text) { return cityOfJapanList.contains(text); } })
  10. 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. 11. Copyright 2015 Shiroyagi Corporation. All rights reserved. 機密 11 Unsubscribeの例 @Override protected void onDestroy() { helloSubscription.unsubscribe(); super.onDestroy(); }
  12. 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. 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. 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. 15. Copyright 2015 Shiroyagi Corporation. All rights reserved. 機密 15 Question?

×