Slide 1

Slide 1 text

Web Api ClientΛߟ͑Δ AndroidΦʔϧελʔζ 2015/8/8 #dotsandroid @__gfx__ at Cookpad, Inc.

Slide 2

Slide 2 text

Introduction to myself • github:gfx, twitter:__gfx__, FUJI Goro • ΫοΫύουॴଐ • ΫοΫύουΞϓϦͷϦϦʔε؅ཧɾϝϯ ςφϯεΛओʹ͍ͯ͠Δ • ࠲ӈͷ໏͸ʮਖ਼͍͠ίʔυΛॻ͜͏ɻಈ ͘ίʔυͰຬ଍ͤͣʹʯ

Slide 3

Slide 3 text

ϥΠϒϥϦͷબఆํ਑ • Android൛ΫοΫύουΞϓϦͰ࠾༻͍ͯ͠Δٕज़ͷݱ ঢ়֬ೝ http://techlife.cookpad.com/entry/2015/06/25/ 093507 • “ΫοΫύουͷ΢ΣϒαʔϏεಉ༷ʹɺϞόΠϧΞϓ Ϧͷ։ൃ΋͜ͷઌ10೥Ҏ্ଓ͘Ͱ͠ΐ͏ɻ͕ٕͨͬͯ͠ ज़બ୒ͷجຊతͳࢦ਑ʹ͓͍ͯ͸ɺ͜ͷઌ10೥ؒܧଓ͠ ͯϝϯςφϯε͓Αͼߋ৽͍ͯ͘͜͠ͱ͕Ͱ͖Δ͔Ͳ͏ ͔͕ॏཁͰ͢ɻ”

Slide 4

Slide 4 text

Web Api Client

Slide 5

Slide 5 text

ͳͥWeb Api Client͕ॏཁͳͷ͔ • ଟ͘ͷεϚϗΞϓϦ͸ɺWeb APIͷΠϯλʔϑΣΠ εʹ͗͢ͳ͍ • Cookpad΋ྫ֎Ͱ͸ͳ͘ɺΞϓϦ͸جຊతʹ JSONΛฦ͢Web API΁ͷΠϯλʔϑΣΠεͰ͋ Δ • Ώ͑ʹWeb Api ClientͰ࢖͏Http ClientΛԿʹ͢ Δ͔͸ඇৗʹॏཁ

Slide 6

Slide 6 text

༻ޠ • Web Api Client • υϝΠϯݻ༗ͷWeb ApiΛݺͼग़͢ΫϥεϥΠϒϥϦ • Picasso, GlideͳͲͷը૾μ΢ϯϩʔμ΋Web Api ClientͷҰछ • ௿ϨϕϧHttp Client • HTTPΛ࣮૷ͨ͠ΫϥεϥΠϒϥϦ • Apache HTTP client, HttpURLConnection, OkHttpͳͲ • ߴϨϕϧHttp Client • ௿ϨϕϧHttp ClientΛϥοϓͯ͠࢖͍΍ͨ͘͢͠ΫϥεϥΠϒϥϦ • Volley, RetrofitͳͲɻWeb Api Clientͱͷ۠ผ͸ᐆດͳ͜ͱ͕͋Δ

Slide 7

Slide 7 text

௿ϨϕϧHttp Clientੇධ

Slide 8

Slide 8 text

Apache HTTP Client • Androidʹ૊Έࠐ·Εͨ௿ϨϕϧHttp Client • DEPRECATED! DEPRECATED! DEPRECATED! • ૊ΈࠐΈ൛ͱϦϦʔε൛ͷဃ཭͕େ͖͍ • multipart requestͳͲมΘͬͨ͜ͱΛ͢Δʹ͸૊ΈࠐΈ൛Ͱ͸଍ Γͣɺద੾ͳόʔδϣϯͷϦϦʔε൛ίϯ ϙʔωϯτΛ࢖͏ඞཁ͕͋Δ • ͳͥAndroid frameworkʹ૊ΈࠐΜͩͷͩ…

Slide 9

Slide 9 text

HttpURLConnection • Javaඪ४ΫϥεϥΠϒϥϦͷHttp Client • యܕతͳ࢖͍ํͰΩϟετ͕ඞཁͱ͍͏ҟৗͳઃܭ • (HttpURLConnection) url.openConnection(); • ΠϯλʔϑΣΠε͸HTTPΛӅṭ͍͗ͯͯ͢͠෼͔Γʹ͍͘ • Android 4.4Ҏ߱͸όοΫΤϯυ࣮૷͕OkHttpʹͳͬͨ ͕ɺ͜Ε͕ΩϟογϡपΓʹόά͕͋ΓΫϥογϡ͢Δͷ Ͱ࢖Θͳ͍΄͏͕ແ೉

Slide 10

Slide 10 text

OkHttp • Squareࣾ։ൃͷ௿ϨϕϧHttp Client • HTTP/2αϙʔτ • ಉظAPIͱඇಉظAPI྆ํ͋Δ • ͳͥ྆ํ༻ҙͨ͠͠…͜Εͷ͍ͤͰʢ͈́ • Android૊ΈࠐΈͰͳ͍ͷ͕େ͖ͳϝϦοτ • ࣮ߦ͞ΕΔίʔυΛ׬શʹ༧ଌͰ͖Δʂʂʂ

Slide 11

Slide 11 text

ཧ૝తͳ௿ϨϕϧHttp Client • ϚϧνεϨουΛѻΘͳ͍͜ͱ • ฒྻϦΫΤετͳͲ͸ΑΓ্ҐϨΠϠͰ΍Δ ΂͖ • ͨͩ͠εϨουηʔϑͰ͸͋Δ΂͖ • pure JavaͰ࣮૷͠ɺAndroid frameworkͷ Http Clientʹґଘ͠ͳ͍͜ͱ

Slide 12

Slide 12 text

ߴϨϕϧHttp Clientੇධ

Slide 13

Slide 13 text

Volley • 2013೥ͷGoogle I/O ʹͯክ੕ͷΑ͏ʹݱΕ ͨߴϨϕϧHttp Client • AndroidքͷελϯμʔυʹͳΔ͔ͱࢥΘΕͨ ͕…

Slide 14

Slide 14 text

VolleyͷΑ͍ͱ͜Ζ • HttpStackʹΑΓɺ௿ϨϕϧHttp ClientΛ੾Γସ͑Մೳ • Apache HTTP Client, HttpURLConnection (Hurl), OkHttp (via okhttp-urlconnection) • RequestQueueΫϥεʹΑΓɺHttpStackʹ౉͢લͷϦΫΤε τΩϡʔΛࡉ੍͔͘ޚՄೳ • ΫοࣾͷෳࡶͳೝূγεςϜΛ௨աͤ͞Δͷʹ͜Ε͕ඞཁ ͩͬͨͨΊ࠾༻ • ͞·͟·ͳίϯϙʔωϯτ͕֦ுՄೳ

Slide 15

Slide 15 text

Volleyͷμϝͳͱ͜Ζ • Ϋϥεଟ͗͢ɺ࣮૷ෳࡶ͗͢ɺ֦ு͕೉͗͢͠ • ϦΫΤετΛΦϯϝϞϦͰॲཧ͢ΔઃܭͳͨΊɺ ը૾ΞοϓϩʔυΛ͠Α͏ͱ͢Δͱॲཧ͕ෳࡶ ͰόοΫΤϯυͷHttp Clientʹґଘ͕ͪ͠ • ࠓ΍deprecatedͱͳͬͨApache HTTP Client ͷߏ଄ମ܈ͱີ݁߹͍ͯͯ͠੾Γ཭͕͠ࠔ೉

Slide 16

Slide 16 text

Retrofit • Squareࣾ੡ͷߴϨϕϧHttp Client • interfaceΛఆٛ͢Δ͚ͩͰWeb Api ClientΛ ࡞੒Ͱ͖Δ • RxJavaΠϯλʔϑΣΠε΋݉Ͷඋ͍͑ͯΔ

Slide 17

Slide 17 text

Retrofitͷ͍͍ͱ͜Ζ • ద౰ͳσϑΥϧτͰΑ͠ͳʹಈ͘ • interfaceΛఆٛ͢Δ͚ͩͰWeb Api ClientΛੜ੒Ͱ͖ Δ • ͔͠΋RxJavaΠϯλʔϑΣΠε΋͋Δ • όοΫΤϯυͷ௿ϨϕϧHttp ClientΛ੾Γସ͑ΒΕΔ • ΠϯλʔϑΣΠε͸ඇৗʹ୯७Ͱ࣮૷͠΍͍͢

Slide 18

Slide 18 text

Retrofitͷμϝͳͱ͜Ζ • Web Api ClientΛΞϊςʔγϣϯͱϦϑϨΫγϣϯͰ੍ޚ͍ͯ͠ΔͨΊ ࣮૷Λ௥͍ʹ͍͘ • ͍ͣΕ੩తίʔυੜ੒ܕʹͳΕ͹͋Δఔ౓͸ղফ͢Δ͔΋ • “Request”ͷΑ͏ͳ൚༻తͳ໊લΛ࢖͍͗͢ʢOkHttpͱ΋ඃͬͯΔʣ • σϑΥϧτ͸ʮݡ͍ʯ͕ద੾ͱ͸ݶΒͳ͍ • OkHttp΍RxJava͕ར༻Մೳ͔Ͳ͏͔ͰৼΔ෣͍͕มΘΔ • ϦΫΤετΛॲཧ͢ΔσϑΥϧτͷExecutor͕cached thread pool executorsͳͷͰεϨουΛ࡞Γ͗͢ΔՄೳੑ͕͋Δ

Slide 19

Slide 19 text

ཧ૝తͳߴϨϕϧHttp Client • ʮݡ͍σϑΥϧτʯ͸ෆཁ • ͋ΔϥΠϒϥϦ͕ೖ͍ͬͯΔͱৼΔ෣͍͕มΘΔͳͲ͸࠷ѱ • Android͸Ϧιʔε͕গͳ͍͜ͱʹཹҙ͢Δ • εϨουΛͲ͏࢖͏͔ɺΞϓϦ͔Β੍ޚͰ͖Δ͔Ͳ͏͔͸ௐ ΂ͨ΄͏͕Α͍ • ϦΫΤετͱϨεϙϯεͷஔ׵͕Ͱ͖Δ͔Ͳ͏͔ • ෳࡶͳೝূΛ௨աͰ͖Δ͔Ͳ͏͔

Slide 20

Slide 20 text

Thread Pool

Slide 21

Slide 21 text

εϨουϓʔϧ͸ͳͥॏཁ͔ • HTTPϦΫΤετΛฒྻͰ࣮ߦ͢ΔͨΊʹ࢖͏ • 1ͭͷը໘Λ࡞ΔͨΊʹෳ਺ͷϦΫΤετ͕ඞ ཁͳ৔߹ɺ௚ྻ࣮ߦͩͱ1ͭͷϦΫΤετͷॲ ཧʹֻ͕͔࣌ؒͬͯΞϓϦશମ͕஗͘ͳΔ • ฒྻʹϦΫΤετΛ࣮ߦ͢Δͱɺ஗͍ϦΫΤ ετʹҾ͖ͣΒΕΔ౓߹͍͕খ͘͞ͳΔ

Slide 22

Slide 22 text

εϨουϓʔϧʹ͍ͭͯ • AndroidͰ࡞ΕΔThread͸1000~10000ݸఔ౓ • ্ݶʹୡ͢ΔͱΞϓϦ͕ٸࢮ͢Δࣄ͕͋ΔͷͰ new Thread() ͸ةݥ • ͦ͜ͰεϨουϓʔϧͰεϨουΛ࢖͍·Θ͢ • Web Api Client͸ฒྻϦΫΤετͷͨΊʹεϨο υϓʔϧΛ࢖͏

Slide 23

Slide 23 text

ϦΫΤετ 1SJPSJUZ#MPDLJOH2VFVF5 5ISFBE 5ISFBE 5ISFBE Ϩεϙϯε 5ISFBE1PPM*NQMFNFOUBUJPO

Slide 24

Slide 24 text

Thread PoolͷͦΕͧΕͷ࣮૷ • OkHttp - ೚ҙͰඪ४Cached Thread Pool • Retrofit - ඪ४Cached Thread Pool • Volley - ಠ࣮ࣗ૷ͷFixed Thread Pool • Picasso - ඪ४Fixed Thread Pool • ੍ޚՄೳ͕࣮ͩ૷ʹΑͬͯσϑΥϧτ஋͕ҧ͏ͷͰ஫ ҙ

Slide 25

Slide 25 text

java.util.concurrent.Executors • εϨουϓʔϧΛੜ੒͢Δඪ४ΫϥεϥΠϒϥϦ • newCachedThreadPool() - ඞཁͳ͚ͩεϨου Λ࡞Γ࠶ར༻͢ΔεϨουϓʔϧʢεϨου਺ ͷ্ݶͳ͠ͳͷͰةݥʣ • newFixedThreadPool() - εϨου਺ݻఆͷε Ϩουϓʔϧ

Slide 26

Slide 26 text

Thread Pool ϕετϓϥΫςΟε • ௿ϨϕϧHttp Client͸εϨουϓʔϧΛ࣋ͨͣɺߴ ϨϕϧHttp Client͕࣋ͭ • σϑΥϧτʹ͸པΒͣΞϓϦ͕executorΛੜ੒ͯ͠ ౉͢ • εϨουΛ࡞Γա͗ͳ͍Fixed Thread PoolΛ࢖͏ • IOό΢ϯυͷ৔߹͸εϨου਺3͘Β͍ͰΑͦ͞͏

Slide 27

Slide 27 text

݁࿦ • ݱঢ়ͩͱOkHttp + Retrofit͕Αͦ͞͏ • RetrofitͷσϑΥϧτεϨουϓʔϧʹ஫ҙ • ͱ͸͍͑Retrofit΋ΘΓͱෆຬ͕͋ΔͷͰͲ͏ ͠Α͏͔ͳͱ͍͏ؾ࣋ͪ

Slide 28

Slide 28 text

That’s all. • Any questions? • ͜ΜͳͷศརͩΑͱ͍͏࿩͕͋Ε͹ @__gfx__ ·Ͱڭ͍͑ͯͩ͘͞ʂʂʂ