Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Lifecycle再復習 / Review the Android Lifecycle callback methods again

Android Lifecycle再復習 / Review the Android Lifecycle callback methods again

Android研究&発表会#1で発表した資料です!
https://arap.connpass.com/event/146619/

Yasutaka Kawamoto

September 28, 2019
Tweet

More Decks by Yasutaka Kawamoto

Other Decks in Programming

Transcript

  1. • Տຊ ହ޹(͔Θ΋ͱ ΍͔ͨ͢) • ॴଐɿגࣜձࣾ tech vein 
 (େࡕࢢதԝ۠ຊொ)

    • ϞόΠϧΞϓϦΤϯδχΞ
 (AndroidଟΊɺiOS΋ŧŔŕŪũƄŝſ) • GitHub: kwmt ɺtwitter: kwmt27 • Google I/O2018 ॳࢀՃ • ෱Ԭग़਎ • ΫϥϑτϏʔϧ޷͖ 2 ࣗݾ঺հ
  2. 5

  3. 5

  4. 5

  5. 14

  6. 14

  7. • ϑϥάϝϯτʹϢʔβʔΠϯλʔϑΣΠεϏϡʔΛΠϯελϯε Խͤ͞ΔͨΊʹݺͼग़͞Ε·͢ɻ ͜Ε͸ΦϓγϣϯͰ͋Γɺඇά ϥϑΟΧϧϑϥάϝϯτ͸nullΛฦ͢Մೳੑ͕͋Γ·͢ɻ ͜Ε ͸ɺonCreateͱonActivityCreatedͷؒͰݺͼग़͞Ε·͢ɻ • ίϯετϥΫλFragment(int)Λݺͼग़͢ͱɺσϑΥϧτϏϡʔ ͕ฦ͞Ε·͢ɻ

    ͦΕҎ֎ͷ৔߹ɺ͜ͷϝιου͸nullΛฦ͠· ͢ɻ • ͜ͷϝιουͰͷΈϨΠΞ΢τΛల։͠ɺฦ͞ΕͨϏϡʔͰಈ࡞ ͢ΔϩδοΫΛonViewCreatedʹҠಈ͢Δ͜ͱΛ͓קΊ͠·͢ɻ • ͔͜͜ΒϏϡʔΛฦ͢৔߹ɺޙͰϏϡʔ͕ղ์͞ΕΔͱ͖ʹ onDestroyViewͰݺͼग़͞Ε·͢ɻ onCreate onCreateView 25
  8. 26 ίϯετϥΫλFragment(int) • Fragmentʹlayout idΛ౉ͤΔίϯετϥΫλ • class MyFragment: Fragment(R.layout.fragment_my) {}

    
 ͱॻ͚·͢ • onCreateViewΛΦʔόʔϥΠυͯ͠ɺinflateͨ͠ViewΛ ฦ͞ͳ͍͍ͯ͘(ϑϨʔϜϫʔΫଆͰ΍ͬͯ͘ΕΔ)
  9. • ΞΫςΟϏςΟ͕Ϣʔβʔͱͷର࿩Λ։࢝͢ΔͨΊʹɺ onRestoreInstanceStateɺonRestartɺ·ͨ͸onPauseͷޙʹݺͼग़͞Ε ·͢ɻ • ͜Ε͸ɺΞΫςΟϏςΟ͕ΞΫςΟϒʹͳΓɺೖྗΛड͚औΔ४උ͕Ͱ͖ͨ ͜ͱΛࣔ͢ΠϯδέʔλͰ͢ɻ ΞΫςΟϏςΟελοΫͷ࠷্෦ʹ͋Γɺ Ϣʔβʔʹදࣔ͞Ε·͢ɻ •

    Build.VERSION_CODES.QΑΓલͷϓϥοτϑΥʔϜόʔδϣϯͰ͸ɺഉଞ తΞΫηεσόΠεΛ։͍ͨΓɺγϯάϧτϯϦιʔεʹΞΫηεͨ͠Γ͢ Δͷʹ΋ద͍ͯ͠·͢ɻ Build.VERSION_CODES.QҎ߱ɺγεςϜʹ͸ෳ਺ ͷ࠶։͞ΕͨΞΫςΟϏςΟ͕ಉ࣌ʹଘࡏ͢ΔՄೳੑ͕͋ΔͨΊɺ୅ΘΓʹ onTopResumedActivityChangedΛ࢖༻͢Δඞཁ͕͋Γ·͢ɻ • ೿ੜΫϥε͸ɺ͜ͷϝιουͷεʔύʔΫϥεͷ࣮૷Λݺͼग़͢ඞཁ͕͋Γ ·͢ɻ ͦ͏Ͱͳ͍৔߹ɺྫ֎(SuperNotCalledException)͕εϩʔ͞Ε·͢ɻ onResume 35
  10. • ΞΫςΟϏςΟ͕γεςϜ಺ͷ࠶։͞Εͨ࠷্ҐͷҐஔΛऔಘ ·ͨ͸ࣦ͏ͱ͖ʹݺͼग़͞Ε·͢ɻ • Build.VERSION_CODES.Q͔ΒɺϚϧν΢Οϯυ΢ϞʔυͱϚ ϧνσΟεϓϨΠϞʔυͰෳ਺ͷΞΫςΟϏςΟΛಉ࣌ʹ࠶։ Ͱ͖·͢ɻ ͜ͷίʔϧόοΫ͸ɺΞΫςΟϏςΟ͕ΧϝϥͳͲ ͷഉଞΞΫηεσόΠεΛ։͜͏ͱ͢ΔՄೳੑ͕͋Δ͜ͱΛࣔ ͢΋ͷͱͯ͠ɺonResumeͷ୅ΘΓʹ࢖༻͢Δඞཁ͕͋Γ·

    ͢ɻ • ΞΫςΟϏςΟ͕࠶։͞ΕͨޙɺҰ࣌ఀࢭ͞ΕΔલʹৗʹ഑৴ ͞Ε·͢ɻ ৔߹ʹΑͬͯ͸εΩοϓ͞ΕΔՄೳੑ͕͋ΓɺΞΫ ςΟϏςΟ͸onResume͔ΒonPauseʹ௚઀ҠߦͰ͖·͕͢ɺ ࠷ॳͷ࠶։ঢ়ଶΛड͚औΔ͜ͱ͸Ͱ͖·ͤΜɻ onTopResumedActivityChanged 36
  11. 41 ΞϓϦऴྃ࣌ͷϥΠϑαΠΫϧ onPause onPause onStop Activity Fragment onStop onDestroy onDestroyView

    onDestroy onDetach ࣌ؒ ※super.onHogeͷޙͷλΠϛϯάͰ֬ೝ ࠶ܝ
  12. • ͜ͷίʔϧόοΫ͸ɺΞΫςΟϏςΟͷฤूதͷӬଓతͳঢ়ଶΛอ ଘ͢ΔͨΊʹओʹ࢖༻͞Εɺ৽͍͠ΞΫςΟϏςΟΛ։࢝͢Δͷʹ े෼ͳϦιʔε͕ͳ͍৔߹ɺ͜ͷΞΫςΟϏςΟΛڧ੍ऴྃͤͣɺԿ ΋ࣦΘΕͳ͍Α͏ʹ͢ΔͨΊʹ࢖༻͠·͢ɻ • ͜Ε͸·ͨɺ࣍ͷΞΫςΟϏςΟ΁ͷ੾Γସ͑ΛՄೳͳݶΓ଎͘͢ ΔͨΊʹɺCPUΛஶ͘͠ফඅ͢Δ΋ͷΛఀࢭ͢Δͷʹదͨ͠৔ॴͰ ͢ɻ •

    Build.VERSION_CODES.QΑΓલͷϓϥοτϑΥʔϜόʔδϣϯͰ ͸ɺഉଞతΞΫηεσόΠεΛดͨ͡ΓɺγϯάϧτϯϦιʔε΁ͷ ΞΫηεΛղ์ͨ͠Γ͢Δͷʹ΋ద͍ͯ͠·͢ɻ Build.VERSION_CODES.QҎ߱ɺγεςϜʹ͸ෳ਺ͷ࠶։͞ΕͨΞΫ ςΟϏςΟ͕ಉ࣌ʹଘࡏ͢ΔՄೳੑ͕͋ΔͨΊɺ୅ΘΓʹ onTopResumedActivityChangedΛ࢖༻͢Δඞཁ͕͋Γ·͢ɻ onPause (2/3) 44
  13. 60 onDestroy͕ݺ͹ΕΔλΠϛϯά • ΞϓϦऴྃ࣌ • ը໘ճస࣌ • ෼ׂը໘λοϓ࣌ • ը໘෼ׂޙɺ΢Οϯυ΢αΠζมߋ࣌

    • ↑onDestoryView͕ݺ͹ΕΔλΠϛϯάͱ΄΅ಉ͕ͩ͡ɺ ผͷϑϥάϝϯτʹભҠ࣌ʹ͸ݺ͹Ε·ͤΜ
  14. • ΞΫςΟϏςΟ͕ഁغ͞ΕΔલʹɺ࠷ऴతͳΫϦʔϯΞοϓΛ࣮ߦ͠·͢ɻ͜Ε͸ɺ ΞΫςΟϏςΟ͕ऴ͍ྃͯ͠Δʢfinish()͕ݺͼग़͞Ε͍ͯΔʣ͔ɺγεςϜ͕ΞΫ ςΟϏςΟͷ͜ͷΠϯελϯεΛҰ࣌తʹഁغͯ͠εϖʔεΛઅ໿͍ͯ͠ΔͨΊʹൃ ੜ͠·͢ɻ isFinishing()ϝιουΛ࢖༻͢Δͱɺ͜ΕΒ2ͭͷγφϦΦΛ۠ผͰ͖· ͢ɻ • ஫ɿ͜ͷϝιου͕σʔλΛอଘ͢Δ৔ॴͱͯ͠ݺͼग़͞ΕΔ͜ͱΛظ଴͠ͳ͍Ͱ͘ ͍ͩ͞ʂͨͱ͑͹ɺΞΫςΟϏςΟ͕ίϯςϯπϓϩόΠμʔͰσʔλΛฤू͍ͯ͠

    Δ৔߹ɺͦΕΒͷฤू͸͜͜Ͱ͸ͳ͘onPause·ͨ͸onSaveInstanceStateͰί ϛοτ͢Δඞཁ͕͋Γ·͢ɻ͜ͷϝιου͸௨ৗɺΞΫςΟϏςΟʹؔ࿈෇͚ΒΕͨ εϨουͳͲͷϦιʔεΛղ์͢ΔͨΊʹ࣮૷͞Ε·͢ɻͦͷͨΊɺΞϓϦέʔγϣ ϯͷ࢒Γͷ࣮ߦதʹഁյ͞ΕͨΞΫςΟϏςΟ͕ͦͷΑ͏ͳ΋ͷΛ࢒͞ͳ͍Α͏ʹ͠ ·͢ɻγεςϜ͕͜ͷϝιουʢ·ͨ͸ଞͷϝιουʣΛݺͼग़ͣ͞ʹɺΞΫςΟϏ ςΟͷϗεςΟϯάϓϩηεΛڧ੍ऴྃ͢Δ৔߹͕͋Γ·͢ɻͦͷͨΊɺϓϩηε͕ ऴྃͨ͠ޙ΋ͦͷ··ʹ͓ͯ͘͜͠ͱΛ໨తͱͯ͠࢖༻͠ͳ͍Ͱ͍ͩ͘͞ɻ • ೿ੜΫϥε͸ɺ͜ͷϝιουͷεʔύʔΫϥεͷ࣮૷Λݺͼग़͢ඞཁ͕͋Γ·͢ɻͦ ͏Ͱͳ͍৔߹ɺྫ֎͕εϩʔ͞Ε·͢ɻ onDestroy 62