Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
How to find problem causes and improve performance DroidKaigi 2017.3.10 Room1 11:50- Fukui Atsuko
Slide 2
Slide 2 text
About me • Ҫರࢠ / Fukui Atsuko • @muumuumuumuu • Retty, Inc. • ͦͷલΈࠐΈܥAndroidͷ͓ࣄ
Slide 3
Slide 3 text
Agenda • ඪɺલఏࣝͷ֬ೝ • Case 1: Systrace • Case 2: Allocation Tracker • ͓·͚1: Memory Leak • ͓·͚2: ֶशࢿྉ
Slide 4
Slide 4 text
ຊͷඪ
Slide 5
Slide 5 text
ͬ͞ΓΞϓϦΛͲ͏ʹ͔͢Δͱ͖ʹ ḷΓ͕ͪͳϨϕϧ • ͦͦͲ͏͍͍͔ͯ͠Θ͔Βͳ͍ (´ʀωʀʆ) • ίʔυ͔ΒΞλϦΛ͚ͭͯ੩తղੳ ( ◠‿◠ ) • πʔϧΛ׆༻ͯ͠ޮΑ͘վળ ٩( 'ω' )و
Slide 6
Slide 6 text
ͬ͞ΓΞϓϦΛͲ͏ʹ͔͢Δͱ͖ ʹॳ৺ऀͷḷΓ͕ͪͳϨϕϧ • ͦͦͲ͏͍͍͔ͯ͠Θ͔Βͳ͍ (´ʀωʀʆ) • ίʔυ͔ΒΞλϦΛ͚ͭͯ੩తղੳ ( ◠‿◠ ) • πʔϧΛ׆༻ͯ͠ޮΑ͘վળ ٩( 'ω' )و ͜ͷ͋ͨΓͷਓΛରʹ͓͠͠·͢
Slide 7
Slide 7 text
ͬ͞ΓΞϓϦΛͲ͏ʹ͔͢Δͱ͖ ʹॳ৺ऀͷḷΓ͕ͪͳϨϕϧ • ͦͦͲ͏͍͍͔ͯ͠Θ͔Βͳ͍ (´ʀωʀʆ) • ίʔυ͔ΒΞλϦΛ͚ͭͯ੩తղੳ ( ◠‿◠ ) • πʔϧΛ׆༻ͯ͠ޮΑ͘վળ ٩( 'ω' )و ͜ͷϨϕϧ·Ͱ͍͘ͷ͕ඪ
Slide 8
Slide 8 text
Android Performance લఏࣝ
Slide 9
Slide 9 text
Androidʹ͓͚ΔPerformance • ҰͭͷApplicationʹMain ThreadҰͭ • ฒྻॲཧΛ͔ͨͬͨ͠ΒผThreadʹॲཧΛ ͚Δඞཁ͕͋Δ
Slide 10
Slide 10 text
Androidʹ͓͚ΔPerformance • Application͝ͱʹAndroidγεςϜͷϦιʔε ʢCPU, ϝϞϦʣͷୣ͍߹͍ • γεςϜ͕֤ApplicationʹϝϞϦΛׂΓͯΔ • ϝϞϦ্ݶʹୡ͢ΔͱGC͕Δ • CPU͕ΘΕͯPerformance͕Լ
Slide 11
Slide 11 text
ANR • Application Not Responding (ΞϓϦέʔ γϣϯ͕Ԡ͍ͯ͠·ͤΜ) • Input Event͕5ඵҎ্Ԡͳ͠ • Broadcast Receiverͷॲཧʹ10ඵҎ্͔͔ Δ
Slide 12
Slide 12 text
۩ମతʹ
Slide 13
Slide 13 text
͝հ͢Δπʔϧ • ͳΔ͘ීஈ։ൃऀ͕͠ΜͰ͍ΔπʔϧΛ ͏ • Android Studio (v2.2.3)
Slide 14
Slide 14 text
ίʔυΛͬͯઆ໌͠·͢ • Android NͷEaster Egg • ίʔυ͕ެ։͞Ε͍ͯ·͢ • https://android.googlesource.com/ platform/frameworks/base/+/ android-7.0.0_r1/packages/EasterEgg • ʮpackages/eastereggʯͰάάͬͯग़·͢
Slide 15
Slide 15 text
Neko • ͻͨ͢ΒͶ͜ΛूΊΔΞϓϦ • Ͷ͋ͭ͜ΊͷΑ͏ʹڈͬͨΓ͠ͳ͍ • Quick Settingsʹ㕒Λஔ͍͓ͯ͘ͱͶ͕͜૿ ͍͑ͯ͘
Slide 16
Slide 16 text
͜Μͳײ͡
Slide 17
Slide 17 text
ɹ ͕100ඖۙ͘ू·Δͱ… • Ұཡը໘Λ։͖ͳ͕Β㕒Λஔ͘ͱANR • Ұཡը໘ΛεΫϩʔϧ͢Δͱͨͭ͘
Slide 18
Slide 18 text
Case 1: Ұཡը໘Λ։͖ͳ͕Β 㕒Λஔ͘ͱANR
Slide 19
Slide 19 text
ANRྫ
Slide 20
Slide 20 text
ύϑΥʔϚϯεͰࠔͬͨ࣌ • Ͳͷॲཧʹ͕͔͔͍࣌ؒͬͯΔ͔ௐΔ • ͕͔͔͍࣌ؒͬͯΔॲཧΛվળ͢Δ
Slide 21
Slide 21 text
ύϑΥʔϚϯεͰࠔͬͨ࣌ • Ͳͷॲཧʹ͕͔͔͍࣌ؒͬͯΔ͔ௐΔ • ͕͔͔͍࣌ؒͬͯΔॲཧΛվળ͢Δ
Slide 22
Slide 22 text
Systrace • ApplicationͱγεςϜશମͷTrace LogΛऔ ಘͰ͖Δ • ࣌ؒ࣠ͰThread͝ͱʹԿ͕ى͍ͬͯ͜Δ͔Θ ͔Δ • ANRͷݪҼͱͳΔMain ThreadΛϒϩοΫ ͍ͯ͠ΔݪҼ͕ݟ͑Δ
Slide 23
Slide 23 text
Systrace • Device MonitorΛ্ཱͪ͛Δ • Tools > Android > Android Device Monitor
Slide 24
Slide 24 text
Systrace (ଓ͖) • DeviceλϒͰtraceରͷΞϓϦΛબ • ɹɹΛΫϦοΫ • ͍ΖΜͳઃఆΛ֬ೝͯ͠OKΛΫϦοΫ
Slide 25
Slide 25 text
݁ՌΛݟͯΈΔ • html͕ੜ͞ΕΔ
Slide 26
Slide 26 text
ͳΜ͔ಡΈࠐ·ΕͯΔ…
Slide 27
Slide 27 text
Ͳͷลͷίʔυ͕ಈ͍͍ͯΔ͔ʁ • “R.drawable.body” ͰίʔυΛݕࡧ • Ͳ͏Β ɹ ɹΛඳը͢Δॲཧ͕ಈ͍͍ͯΔ
Slide 28
Slide 28 text
ύϑΥʔϚϯεͰࠔͬͨ࣌ • Ͳͷॲཧʹ͕͔͔͍࣌ؒͬͯΔ͔ௐΔ • ͕͔͔͍࣌ؒͬͯΔॲཧΛվળ͢Δ
Slide 29
Slide 29 text
ॲཧΛվળ͠Α͏ • վળҎલʹͦͦඞཁͳॲཧͳͷ͔ߟ͑Δ • 㕒Λ͓͘λΠϛϯάͰ ɹ ͷඳըॲཧ ඞཁͳ͍ͣ • ෆඞཁͳॲཧ͕ಈ͍ͯίετ্͕͕͍ͬͯ Δ
Slide 30
Slide 30 text
ίʔυͷ͍ํ • ɹɹ Λඳը͢ΔτϦΨʔΛϦετΞοϓ • Ұཡը໘ͷonCreate() • Shared Preference ͷมߋ௨
Slide 31
Slide 31 text
ίʔυͷ͍ํ • Shared Preferenceͷมߋ௨ͷτϦΨʔΛ ߟ͑ͯΈΔ • ɹ ɹͷσʔλͱ㕒ͷใΛҰͭͷShared Preferenceʹ·ͱΊͯ͠·ͬͨ • 㕒ͷঢ়ଶ͕มΘͬͨͨΊɹɹɹΛ࠶ඳը
Slide 32
Slide 32 text
मਖ਼ํ๏ • ͱͱҰͭͷSharedPreference Τα Ұཡը໘࠶ඳըॲཧ 4IBSFE1SFGFSFODF$IBOHF-JTUFOFS
Slide 33
Slide 33 text
• σʔλΛ͠ɺదͳൣғͰlistenerΛઃ ఆ Τα मਖ਼ํ๏ Ұཡը໘࠶ඳըॲཧ 4IBSFE1SFGFSFODF$IBOHF-JTUFOFS
Slide 34
Slide 34 text
No content
Slide 35
Slide 35 text
Case 2: Ұཡը໘ΛεΫϩʔϧ͢Δͱ ͨͭ͘
Slide 36
Slide 36 text
͖ͨͭྫ
Slide 37
Slide 37 text
ύϑΥʔϚϯεͰࠔͬͨ࣌ • Ͳͷॲཧʹ͕͔͔͍࣌ؒͬͯΔ͔ௐΔ • ͕͔͔͍࣌ؒͬͯΔॲཧΛվળ͢Δ
Slide 38
Slide 38 text
Allocation Tracker (DDMS) • Applicationͷmemory allocationΛه • هର • Call Stack • ϝϞϦαΠζ
Slide 39
Slide 39 text
Allocation Tracker (DDMS) • Android Studioىಈ • Android Monitor > Monitors >
Slide 40
Slide 40 text
Allocation Tracker (ଓ͖) • Tracking͕ελʔτ͢ΔͷͰɺը໘Λૢ࡞͠ ͔ͯͨͭͤΔ • Tracking͍ͨ͠ಈ࡞͕ऴྃͨ͠Β͏Ұɹ Λԡͯ͠Trackingऴྃ
Slide 41
Slide 41 text
݁ՌΛݟͯΈΔ • .allocϑΝΠϧ͕ੜ͞ΕΔ
Slide 42
Slide 42 text
݁ՌΛݟͯΈΔ • Stack Trace ΛͨͲΕɺͲ͕͜ॏ͍͔Θ͔Δ • ӈΫϦοΫͰιʔείʔυʹඈ·͢ʂ
Slide 43
Slide 43 text
͖ͨͭͷݪҼ • εΫϩʔϧ͢Δͱ͖ʹɹɹ ͷΞΠίϯΛඳ ը͢Δॲཧ͕ॏ͗͢Δ • ॲཧͷৄࡉΛಡΜͰΈΔ • BitmapͷੜɺVector DrawableͷੜΛ શͯϝΠϯεϨουͰ࣮ߦ
Slide 44
Slide 44 text
ύϑΥʔϚϯεͰࠔͬͨ࣌ • Ͳͷॲཧʹ͕͔͔͍࣌ؒͬͯΔ͔ௐΔ • ͕͔͔͍࣌ؒͬͯΔॲཧΛվળ͢Δ
Slide 45
Slide 45 text
ॲཧͷվળ • ॏ͍ͨॲཧΛผεϨουʹҠͯ͠ɺը໘ͷߋ ৽ॲཧͷΈϝΠϯεϨουͰߦ͏Α͏ʹมߋ ͢Δ • ը໘ͷߋ৽ॲཧUIεϨουͰߦ͏ඞཁ͕ ͋ΔͷͰҙ
Slide 46
Slide 46 text
No content
Slide 47
Slide 47 text
͓·͚ Memory Leakʹ͍ͭͯ
Slide 48
Slide 48 text
Memory Leak • GC (Garbage Collection)ରʹͳΒͳ͍͚ ΕͲɺΘΕ͍ͯͳ͍ΦϒδΣΫτ͕ϝϞϦ ώʔϓʹډ࠲Γଓ͚Δ͜ͱ • ղ์͞Εͳ͍ͱ༻ՄೳͳϝϞϦ͕ݮ͍ͬͯ ͘ͷͰɺGC͕සൟʹى͜ΓɺύϑΥʔϚϯ ε͕Լ͢Δ
Slide 49
Slide 49 text
Heap Viewer (DDMS) • ಛఆ࣌ͷϝϞϦͷঢ়گΛݟΔ͜ͱ͕Ͱ͖Δ
Slide 50
Slide 50 text
Heap Viewer (DDMS) • Device MonitorΛ্ཱͪ͛Δ • Tools > Android > Android Device Monitor
Slide 51
Slide 51 text
Heap Viewer (DDMS) • Device Tab > ରͷϓϩηεΛબ • ɹΛԡͯ͠ Cause GCϘλϯԡԼ
Slide 52
Slide 52 text
Heap Viewer (DDMS) • ҙͷλΠϛϯάͰGCΛىͯ͜͠Heap Size γεςϜʹׂΓͯΒΕͨϝϞϦΛ֬ೝͰ ͖Δ
Slide 53
Slide 53 text
Leak Canary • Square͕ࣾΦʔϓϯιʔεͰެ։͍ͯ͠Δ library • https://github.com/square/leakcanary • LeakΛݕͨ͠ΒϦΞϧλΠϜͰ௨ • ͲͷΠϯελϯε͕Leak͔ͨ͠Θ͔Δ
Slide 54
Slide 54 text
͓·͚ ֶशࢿྉ
Slide 55
Slide 55 text
Android Developers • ͝ଘެࣜReference • ͜ͷ͋ͨΓ͕ΦεεϝͰ͢ • Develop > Training > Best Practices for Performance • Develop > Android Studio >User Guide > Profile Your App
Slide 56
Slide 56 text
UDACITY • ΦϯϥΠϯֶशϓϥοτϑΥʔϜ • https://www.udacity.com/ • Google͕ύʔτφʔγοϓΛక݁ • Android Performanceίʔε • ಈըͱίʔυͱΫΠζͷΈ߹Θͤ
Slide 57
Slide 57 text
ॻ੶ • ϝϞϦϦʔΫͷ͕΅ΜΓͱ͔͠Θ͔Βͳ ͔ͬͨਓ͚ • JavaͰͳͥͭ͘Δͷ͔ ͓͖͍ͬͯͨJava ϓϩάϥϛϯάͷجૅࣝ • ถ࣋ ण, ܦBPࣾ, 309p
Slide 58
Slide 58 text
ॻ੶ • AndroidͷThreadProcessΛͬͱΓͨ ͍ਓ͚ • Androidͷͳ͔Έ InsideAndroid • Tae Yeon Kimଞ, ύʔιφϧϝσΟΞ, 506p
Slide 59
Slide 59 text
Thank you!