Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Hiroyuki Kusu
PPTX, PDF
3,009 views
【Potatotips #30】RxJavaを活用する3つのユースケース
2016/06/23(Thu)に開催された potatotips #30 (http://potatotips.connpass.com/event/32665/) での発表資料です。
Technology
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Downloaded 16 times
1
/ 27
2
/ 27
3
/ 27
4
/ 27
5
/ 27
6
/ 27
7
/ 27
8
/ 27
9
/ 27
10
/ 27
11
/ 27
12
/ 27
13
/ 27
14
/ 27
15
/ 27
16
/ 27
17
/ 27
18
/ 27
19
/ 27
20
/ 27
21
/ 27
22
/ 27
23
/ 27
24
/ 27
25
/ 27
26
/ 27
27
/ 27
More Related Content
PDF
Drawing Dataflow On Dalvik Bytecodes
by
Takahiro Yoshimura
PDF
BMXUG ブロックチェーンハンズオン 20190622
by
Kohei Nishikawa
PDF
MlnagoyaRx
by
Shoichi Kakamu
PDF
RxSwift
by
Kosuke Usami
PPTX
基礎構文班 5回目 繰り返し
by
XMLProJ2014
PPTX
Wpfと非同期
by
yone64
PDF
RxSwift x APIKit
by
Kosuke Usami
PDF
リアクティブプログラミング
by
Yuuki Takano
Drawing Dataflow On Dalvik Bytecodes
by
Takahiro Yoshimura
BMXUG ブロックチェーンハンズオン 20190622
by
Kohei Nishikawa
MlnagoyaRx
by
Shoichi Kakamu
RxSwift
by
Kosuke Usami
基礎構文班 5回目 繰り返し
by
XMLProJ2014
Wpfと非同期
by
yone64
RxSwift x APIKit
by
Kosuke Usami
リアクティブプログラミング
by
Yuuki Takano
Similar to 【Potatotips #30】RxJavaを活用する3つのユースケース
PDF
Rx java x retrofit
by
Shun Nakahara
PDF
RxJava on Android
by
yo_waka
PDF
Android meets RxJava - 渋谷Java#6
by
yo_waka
PPTX
歌舞伎座Tech Rx会
by
Kaora Shibacaki
PDF
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
by
Yoshifumi Kawai
PPTX
Reactive
by
Akihiro Ikezoe
PDF
Composable Callbacks & Listeners
by
Taisuke Oe
KEY
Actor&stm
by
潤一 加藤
PDF
Prism + ReactiveProperty入門
by
一希 大田
PDF
Xamarin で ReactiveUI を使ってみた
by
Hironov OKUYAMA
PPTX
Reactive Programming
by
maruyama097
PDF
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
by
Syo Ikeda
PDF
2015 07-23 Tokyo Realm Meetup
by
Niko Yuwono
PPTX
Effective Java 輪読会 項目66-68
by
Appresso Engineering Team
PDF
Reactive Extensionsで非同期処理を簡単に
by
Yoshifumi Kawai
PDF
freee社でのReactiveCocoa活用例
by
yo_waka
PDF
Why Reactive Matters #ScalaMatsuri
by
Yuta Okamoto
PDF
Sansan様 登壇資料
by
Daisuke Nagata
PDF
Xamarin によるクロスプラットフォームモバイルアプリ開発
by
Hironov OKUYAMA
PPTX
つぶLT20121215
by
遼一 杉浦
Rx java x retrofit
by
Shun Nakahara
RxJava on Android
by
yo_waka
Android meets RxJava - 渋谷Java#6
by
yo_waka
歌舞伎座Tech Rx会
by
Kaora Shibacaki
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
by
Yoshifumi Kawai
Reactive
by
Akihiro Ikezoe
Composable Callbacks & Listeners
by
Taisuke Oe
Actor&stm
by
潤一 加藤
Prism + ReactiveProperty入門
by
一希 大田
Xamarin で ReactiveUI を使ってみた
by
Hironov OKUYAMA
Reactive Programming
by
maruyama097
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
by
Syo Ikeda
2015 07-23 Tokyo Realm Meetup
by
Niko Yuwono
Effective Java 輪読会 項目66-68
by
Appresso Engineering Team
Reactive Extensionsで非同期処理を簡単に
by
Yoshifumi Kawai
freee社でのReactiveCocoa活用例
by
yo_waka
Why Reactive Matters #ScalaMatsuri
by
Yuta Okamoto
Sansan様 登壇資料
by
Daisuke Nagata
Xamarin によるクロスプラットフォームモバイルアプリ開発
by
Hironov OKUYAMA
つぶLT20121215
by
遼一 杉浦
More from Hiroyuki Kusu
PPTX
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
by
Hiroyuki Kusu
PPTX
【YAPC::Asia Hachioji 2016】ES2015のclassでアプリケーションを書いてみた話
by
Hiroyuki Kusu
PPTX
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
by
Hiroyuki Kusu
PPTX
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
by
Hiroyuki Kusu
PPTX
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
by
Hiroyuki Kusu
PPTX
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
by
Hiroyuki Kusu
PPTX
【eLV勉強会】AngularJSでのモバイルフロントエンド開発
by
Hiroyuki Kusu
PPTX
エンジニアにMacを薦める理由
by
Hiroyuki Kusu
PPTX
ソーシャルアプリで人を熱中させる要素を説明する一枚絵
by
Hiroyuki Kusu
PPTX
【ABC2014Spring LT】AngularJSでWEBアプリ開発
by
Hiroyuki Kusu
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
by
Hiroyuki Kusu
【YAPC::Asia Hachioji 2016】ES2015のclassでアプリケーションを書いてみた話
by
Hiroyuki Kusu
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
by
Hiroyuki Kusu
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
by
Hiroyuki Kusu
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
by
Hiroyuki Kusu
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
by
Hiroyuki Kusu
【eLV勉強会】AngularJSでのモバイルフロントエンド開発
by
Hiroyuki Kusu
エンジニアにMacを薦める理由
by
Hiroyuki Kusu
ソーシャルアプリで人を熱中させる要素を説明する一枚絵
by
Hiroyuki Kusu
【ABC2014Spring LT】AngularJSでWEBアプリ開発
by
Hiroyuki Kusu
Recently uploaded
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
PPTX
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
【Potatotips #30】RxJavaを活用する3つのユースケース
1.
Androidアプリ開発で RxJavaを活用する 3つのユースケース Hiroyuki Kusu (
@hkusu_ ) 2016/06/23 potatotips #30
3.
①非同期処理の結果うけとり ②イベントの送信/購読 ③データの変更監視 ※今回はデータ加工、FRP的な話はしません ※本スライド上のサンプルコードは Java 8
および Retrolambda の利用を前提としています
4.
①非同期処理の結果うけとり ②イベントの送信/購読 ③データの変更監視
5.
doSomethingAsnc() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(aStringList -> { //
… 結果を受け取って何か }); コールバックを廃して同期的に書ける Observable<T>を返す非同期な処理
6.
Observable.create(subscriber -> { //
... 裏スレッドで何か subscriber.onNext("something"); subscriber.onCompleted(); }) .subscribeOn(Schedulers.io()) // 裏スレッドを指定 .observeOn(AndroidSchedulers.mainThread()) // メインスレッドを指定 .subscribe(res -> { // ... メインスレッドで結果を受け取って何か }); ちなみに重たい処理を裏スレッドで実行させたい 時にも使える(AsyncTask、AsyncTaskLoaderの替り)
7.
①非同期処理の結果うけとり ②イベントの送信/購読 ③データの変更監視
8.
購読側 イベント仲介用のクラス (シングルトン) Subject 送信側 早い話が Otto や
EventBus のようなもの コールバックを引き回すのが煩雑な場合に (例:Activity 間の通知、ListViewの操作イベント取得など) イベントの送信 イベントの購読
9.
public class RxEventBus
{ private final Subject<Object, Object> subject = new SerializedSubject<>(PublishSubject.create()); public <T> Subscription onEvent(Class<T> clazz, Action1<T> handler) { return subject .ofType(clazz) .subscribe(handler); } public void post(Object event) { subject.onNext(event); } } RxEventBus.java(前項におけるイベント仲介用のクラス) 内部にSubjectを保持 継続的にイベントを発生させるには Subject を用いる
10.
public class RxEventBus
{ private final Subject<Object, Object> subject = new SerializedSubject<>(PublishSubject.create()); public <T> Subscription onEvent(Class<T> clazz, Action1<T> handler) { return subject .ofType(clazz) .subscribe(handler); } public void post(Object event) { subject.onNext(event); } } RxEventBus.java(前項におけるイベント仲介用のクラス) イベントの購読用メソッド イベントクラス名でフィルタ
11.
public class RxEventBus
{ private final Subject<Object, Object> subject = new SerializedSubject<>(PublishSubject.create()); public <T> Subscription onEvent(Class<T> clazz, Action1<T> handler) { return subject .ofType(clazz) .subscribe(handler); } public void post(Object event) { subject.onNext(event); } } RxEventBus.java(前項におけるイベント仲介用のクラス) イベントの送信用メソッド
12.
rxEventBus.post(new SomeEvent()); rxEventBus.onEvent(SomeEvent.class, event
-> { // … 結果を受け取って何か }); イベントの送信 イベントの購読 イベント仲介用のクラスのインスタンスを共有(シングルトン等)し ておけば、アプリケーションのどこからでもイベントを送れる
13.
①非同期処理の結果うけとり ②イベントの送信/購読 ③データの変更監視
14.
データを保持するクラス Subject購読側 購読 データ変更
15.
public class SomeRepository
{ private final Subject<String, String> subject = new SerializedSubject<>(PublishSubject.create()); public final Observable<String> getObservable() { return subject; } private void notify(String string) { subject.onNext(string); } // ... 以降、CRUDのコード } 内部にSubjectを保持 SomeRepository.java(前項におけるデータを保持するクラス)
16.
public class SomeRepository
{ private final Subject<String, String> subject = new SerializedSubject<>(PublishSubject.create()); public final Observable<String> getObservable() { return subject; } private void notify(String string) { subject.onNext(string); } // ... 以降、CRUDのコード } SomeRepository.java(前項におけるデータを保持するクラス) SubjectをObservable<T> として外部へ公開
17.
public class SomeRepository
{ private final Subject<String, String> subject = new SerializedSubject<>(PublishSubject.create()); public final Observable<String> getObservable() { return subject; } private void notify(String string) { subject.onNext(string); } // ... 以降、CRUDのコード } SomeRepository.java(前項におけるデータを保持するクラス) データ変更を通知する private メソッド ※データのCRUD時に notify() をコールする規則とする
18.
someRepository.getObservable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(aString -> { //
... 結果を受け取って何か }); 購読側 データが変更される度にストリームが 流れてくる
19.
データを保持するクラス Activity/ Fragment 購読 ビューへの反映 何かしらの CRUD操作 データ 『データに対する』ビューの描画処理が宣言的に定義できる。 データの流れが一方向なので分かりやすい 関心の分離
20.
TIPS
21.
・購読の一括解除ができる ・Activity の onPause()
等で購読を停止 したい場合、一度 unscribe() すると add() できなくなる問題 ⇒ unsubscribe() でなく clear() を使う CompositeSubscription
22.
doSomethingAsnc() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(aStringList -> { //
... 結果を受け取って何か }); 型名を示す変数名をつけると分かりやすいかも? Retrolambda を利用していてストリーム中 のデータの型がよく分からなくなる問題 例)List<String> の場合
23.
public class Tuple3<T1,
T2, T3> { private final T1 t1; private final T2 t2; private final T3 t3; private Tuple3(T1 t1, T2 t2, T3 t3) { this.t1 = t1; this.t2 = t2; this.t3 = t3; } public T1 get1() { return t1; } public T2 get2() { return t2; } public T3 get3() { return t3; } public static <T1, T2, T3> Tuple3<T1, T2, T3> create(T1 t1, T2 t2, T3 t3) { return new Tuple3<>(t1, t2, t3); } } 3つ以上の時は Tuple 的なクラスを用意する Observable<T> で複数の値を扱いたい場合 Observable<Pair<String, List<Integer>>> 2つの場合は Pair が使える
24.
Sample code hkusu/android-rxjava-app-sample
25.
THANKS!
26.
予備スライド
27.
Activity/Fragment UseCase層 Repository層 Service層 (AndroidのServiceではない) DI DI DI Observable<T> Observable<T> Observable<T> 裏スレッド(
Schedulers.io() )で実行 メインスレッド ( AndroidSchedulers .mainThread() )で購読
Download