SlideShare a Scribd company logo
1 of 15
Download to read offline
Copyright 2014 Shiroyagi Corporation. All rights reserved.
2015-07-23
Realm Meetup
白ヤギコーポレーション
Shiroyagi Corporation
Niko Adrianus Yuwono
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
2
自己紹介
Niko Adrianus Yuwono
Android Developer
Github : https://github.com/NAYOSO
インドネシアから来ました!
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でAsynchronousデータの流れを表しま
す。Observablesも色んなオペレータがあって、オペ
レータでObservableをフィルター、選択、変換、構
成、そして組み合わせすることができます。
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
5
Observableとは?
・ObservableというObjectはタスクが終わったあとに
Subscriberに通知して、SubscriberはObservableが発
するものを操作します。
・Observableは一つのタスクを待たずにSubscriberを
使って、SubscriberがObservableを監視して、
Observableのタスクが終わったら、Observableの結果
をSubscriberにパスします。そのように、他のタスクを
ブロックしないので、複数のタスクを同時に操作すること
ができます。
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を表示します。
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だけを操作
します。
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」を
発します。
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);
}
})
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
10
AndroidのActivity/Fragment Lifecycleに関して
Androidアプリは普通のJavaアプリと違って、Activity/
FragmentのLifecycleがあります。
例えばサーバーから取ったデータをUIに表示しますが、そ
れはActivity/Fragmentがまだアクティブな状態の間だけ
可能です。なので、エラーを防ぐ為にActivity/Fragment
が破壊される前にObservableからunsubscribeしてくださ
い。
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
11
Unsubscribeの例
@Override
protected void onDestroy() {
helloSubscription.unsubscribe();
super.onDestroy();
}
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に通知しません。
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()).
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
で使えないです。
Copyright 2015 Shiroyagi Corporation. All rights reserved.
機密
15
Question?

More Related Content

Similar to 2015 07-23 Tokyo Realm Meetup

拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。GuildWorks
 
拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。toshihiro ichitani
 
AITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえりAITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえりdsuke Takaoka
 
kintone ポータルいじってみた
kintone ポータルいじってみたkintone ポータルいじってみた
kintone ポータルいじってみたSatoru Yamaguchi
 
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティング
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティングxR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティング
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティングShinya Tachihara
 
Pepperのアプリ開発について - ABC2015 Summer -
Pepperのアプリ開発について - ABC2015 Summer -Pepperのアプリ開発について - ABC2015 Summer -
Pepperのアプリ開発について - ABC2015 Summer -Hirokazu Egashira
 
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」feedtailor
 
Microsoft Azure で スマホからIoTまで
Microsoft AzureでスマホからIoTまでMicrosoft AzureでスマホからIoTまで
Microsoft Azure で スマホからIoTまで Masaki Yamamoto
 
Hackable IoT devices which are used for connected home
Hackable IoT devices which are used for connected homeHackable IoT devices which are used for connected home
Hackable IoT devices which are used for connected homeDaisuke Kimura
 
データ視覚化・分析アプリケーションの超速開発
データ視覚化・分析アプリケーションの超速開発データ視覚化・分析アプリケーションの超速開発
データ視覚化・分析アプリケーションの超速開発Satoru Yamaguchi
 
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractTakuya Iwatsuka
 
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」aitc_jp
 
AgileShimane始動!! in OSC2011Shimane
AgileShimane始動!! in OSC2011ShimaneAgileShimane始動!! in OSC2011Shimane
AgileShimane始動!! in OSC2011ShimaneRyuichi Tsuruhara
 
20150417 kintoneユーザー会発表資料
20150417 kintoneユーザー会発表資料20150417 kintoneユーザー会発表資料
20150417 kintoneユーザー会発表資料hiroponz
 
html5jロボット部 第3回勉強会「ロボット × ビジネス」
html5jロボット部 第3回勉強会「ロボット × ビジネス」html5jロボット部 第3回勉強会「ロボット × ビジネス」
html5jロボット部 第3回勉強会「ロボット × ビジネス」robotstart
 
2015 0710 東京鯱光会月例会_公開用.pptx
2015 0710 東京鯱光会月例会_公開用.pptx2015 0710 東京鯱光会月例会_公開用.pptx
2015 0710 東京鯱光会月例会_公開用.pptxOsamu Sugiura
 
SMBのバックオフィス業務を最適化するAPI連携
SMBのバックオフィス業務を最適化するAPI連携SMBのバックオフィス業務を最適化するAPI連携
SMBのバックオフィス業務を最適化するAPI連携API Meetup
 

Similar to 2015 07-23 Tokyo Realm Meetup (20)

拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。
 
拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。拝啓、プロダクトオーナー様。
拝啓、プロダクトオーナー様。
 
AITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえりAITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえり
 
kintone ポータルいじってみた
kintone ポータルいじってみたkintone ポータルいじってみた
kintone ポータルいじってみた
 
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティング
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティングxR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティング
xR Tech Tokyo 登壇資料 Mixed Realityではじまるコラボレーティブ・コンピューティング
 
Pepperのアプリ開発について - ABC2015 Summer -
Pepperのアプリ開発について - ABC2015 Summer -Pepperのアプリ開発について - ABC2015 Summer -
Pepperのアプリ開発について - ABC2015 Summer -
 
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
 
Pokelabo android web
Pokelabo android webPokelabo android web
Pokelabo android web
 
Microsoft Azure で スマホからIoTまで
Microsoft AzureでスマホからIoTまでMicrosoft AzureでスマホからIoTまで
Microsoft Azure で スマホからIoTまで
 
Hackable IoT devices which are used for connected home
Hackable IoT devices which are used for connected homeHackable IoT devices which are used for connected home
Hackable IoT devices which are used for connected home
 
データ視覚化・分析アプリケーションの超速開発
データ視覚化・分析アプリケーションの超速開発データ視覚化・分析アプリケーションの超速開発
データ視覚化・分析アプリケーションの超速開発
 
Archer
ArcherArcher
Archer
 
Spring I/O 2018 報告会
Spring I/O 2018 報告会Spring I/O 2018 報告会
Spring I/O 2018 報告会
 
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
 
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
 
AgileShimane始動!! in OSC2011Shimane
AgileShimane始動!! in OSC2011ShimaneAgileShimane始動!! in OSC2011Shimane
AgileShimane始動!! in OSC2011Shimane
 
20150417 kintoneユーザー会発表資料
20150417 kintoneユーザー会発表資料20150417 kintoneユーザー会発表資料
20150417 kintoneユーザー会発表資料
 
html5jロボット部 第3回勉強会「ロボット × ビジネス」
html5jロボット部 第3回勉強会「ロボット × ビジネス」html5jロボット部 第3回勉強会「ロボット × ビジネス」
html5jロボット部 第3回勉強会「ロボット × ビジネス」
 
2015 0710 東京鯱光会月例会_公開用.pptx
2015 0710 東京鯱光会月例会_公開用.pptx2015 0710 東京鯱光会月例会_公開用.pptx
2015 0710 東京鯱光会月例会_公開用.pptx
 
SMBのバックオフィス業務を最適化するAPI連携
SMBのバックオフィス業務を最適化するAPI連携SMBのバックオフィス業務を最適化するAPI連携
SMBのバックオフィス業務を最適化するAPI連携
 

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することができます。 - flatMap() : 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"}) .filter(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?