Slide 1

Slide 1 text

Firebase Android SDK Tasks API の直列処理について @firebase.yebisu #1 2017/11/21 1

Slide 2

Slide 2 text

自己紹介 さわい たつや Android Developer Firebase は前職で + 個人的に触っています。 現在は CyberAgent, Inc. 2

Slide 3

Slide 3 text

Tasks API 非同期処理を表現する API で、Firebase Android SDK はもちろん、 Google の SDK でよく使われている。 3

Slide 4

Slide 4 text

Firebase SDK 内での具体的な使用箇所例 https://firebase.google.com/docs/reference/android/com/google /firebase/auth/FirebaseAuth 非同期処理を伴う API には大体使われている。 当然 Android との親和性も高い。 Listener のメモリリー ク防止策。 4

Slide 5

Slide 5 text

単独で実行する分にはそのまま使えば良い が、 連続で実行するにはどうしたら… 例えば、SignIn した後に、 その User の IdToken を取得したい時など... 5

Slide 6

Slide 6 text

Continuation Interface https://developers.google.com/android/reference/com/google/a ndroid/gms/tasks/Continuation 6

Slide 7

Slide 7 text

Continuation を使って実装してみると… v a l e x e c u t o r : E x e c u t o r = E x e c u t o r s . n e w S i n g l e T h r e a d E x e c u t o r ( ) F i r e b a s e A u t h . g e t I n s t a n c e ( ) . s i g n I n A n o n y m o u s l y ( ) . c o n t i n u e W i t h T a s k ( e x e c u t o r , C o n t i n u a t i o n < A u t h R e s u l t , T a s k < G e t T o k e n R e s u l t > > { i f ( i t . i s S u c c e s s f u l ) { i t . r e s u l t . u s e r . g e t I d T o k e n ( f a l s e ) } e l s e { t h r o w i t . e x c e p t i o n ! ! } } ) / / L i s t e n e r に続く. . . 7

Slide 8

Slide 8 text

Executor...? 可読性低い... 毎回これやるのしんどい... 8

Slide 9

Slide 9 text

Why Executor? Task はそれぞれ自身で Executor を管理している。Continuation も実態は、 実行したい Task の結果を受け取る Task なので、 Executor を用意する必要がある。 Task を自分で用意する際に Executor を指定しないと、 その Task は必ず Main application thread で実行される!!! 9

Slide 10

Slide 10 text

ライブラリつくりました NeoTask https://goo.gl/KKS5Vh 特徴 100% Kotlin の 軽量 Extension ライブラリ。 Tasks API を使う際に考えなければならない細かいあれこれを吸収 してくれる。 10

Slide 11

Slide 11 text

NeoTask を使うと... F i r e b a s e A u t h . g e t I n s t a n c e ( ) . s i g n I n A n o n y m o u s l y ( ) . t h e n { i t . u s e r . g e t I d T o k e n ( f a l s e ) } / / L i s t e n e r に続く 簡潔になった! 11

Slide 12

Slide 12 text

NeoTask はこんなこともできる Task の並列実行も簡単に実装できる。 Custom Task を簡単に作成できる。 12

Slide 13

Slide 13 text

ありがとうございました! NeoTask 13