[Android ๊ธฐ์ดˆ] 6. ์•ˆ๋“œ๋กœ์ด๋“œ 4๋Œ€ ์ปดํฌ๋„ŒํŠธ, Activity, Activity Lifecycle, Activity Stack
๋ฐ˜์‘ํ˜•

 

 

 

 

 

์•ˆ๋“œ๋กœ์ด๋“œ 4๋Œ€ ์ปดํฌ๋„ŒํŠธ(Component)

 

 

  • ์•ˆ๋“œ๋กœ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ฃผ๋กœ ๋„ค ๊ฐ€์ง€ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ
  • ์ด๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ , ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ๊ณผ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •
  • ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๋ฉด์„œ๋„ ์„œ๋กœ ๊ธด๋ฐ€ํ•˜๊ฒŒ ์—ฐ๋™

 

1. ์•กํ‹ฐ๋น„ํ‹ฐ (Activities)

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ํ™”๋ฉด
    (์˜ˆ) ์ด๋ฉ”์ผ ์•ฑ์˜ ์ด๋ฉ”์ผ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” ํ™”๋ฉด, ์ด๋ฉ”์ผ ์ž‘์„ฑ ํ™”๋ฉด ๋“ฑ์ด ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ์•กํ‹ฐ๋น„ํ‹ฐ
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋ฐ˜์‘ํ•˜๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

 

2. ์„œ๋น„์Šค (Services)

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰
    (์˜ˆ) ์Œ์•… ์žฌ์ƒ์ด๋‚˜ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
  •  ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ '๋ฐฑ์Šคํ…Œ์ด์ง€'์—์„œ ์ผ์–ด๋‚˜๋Š” ์ž‘์—…์„ ๋‹ด๋‹น

 

3. ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„ (Broadcast Receivers)

  • ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ ํ˜น์€ ๋‹ค๋ฅธ ์•ฑ์—์„œ ๋ฐœ์†ก๋˜๋Š” ์ด๋ฒคํŠธ๋‚˜ ์ •๋ณด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ
    (์˜ˆ) ๋ฐฐํ„ฐ๋ฆฌ ๋ถ€์กฑ ๊ฒฝ๊ณ , ํ™”๋ฉด ๊บผ์ง ๋“ฑ์˜ ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋…ํ•˜๊ณ , ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ์Œ

 

4. ์ฝ˜ํ…ํŠธ ํ”„๋กœ๋ฐ”์ด๋” (Content Providers)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ณต์œ 
    (์˜ˆ) ์—ฐ๋ฝ์ฒ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์—ฐ๋ฝ์ฒ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ผ์ข…์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ 

 

 


 

 

์•กํ‹ฐ๋น„ํ‹ฐ (Activity)

 

 

 

  • ์•กํ‹ฐ๋น„ํ‹ฐ(Activity)๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์ฐฝ(window)์„ ์˜๋ฏธ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฒฐ์ •์ง“๋Š” ์ค‘์ถ”์ ์ธ ์—ญํ• 
  • ๊ฐ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ๋…๋ฆฝ์ ์ธ ํ™”๋ฉด์œผ๋กœ์„œ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต
  • ์ƒํ˜ธ ์ž‘์šฉ
    - ์‚ฌ์šฉ์ž๊ฐ€ ์ „ํ™”๋ฅผ ๊ฑฐ๋Š” ํ™”๋ฉด, ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ์ง€๋„๋ฅผ ํ™•์ธํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋“ฑ์žฅ
  • UI ๊ตฌ์„ฑ
    - ๊ฐ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ํ•˜๋‚˜์˜ ์ฐฝ์„ ๊ฐ€์ง€๋ฉฐ, ์ด ์ฐฝ์—์„œ '๋ทฐ(View)'๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ฐ์ฒด๋“ค์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
    - ๋ทฐ ๊ฐ์ฒด๋“ค์€ ๋ฒ„ํŠผ, ํ…์ŠคํŠธ ํ•„๋“œ, ์ด๋ฏธ์ง€ ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ๋“ค์„ ํฌํ•จ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ์ž‘
    - ๋ชจ๋“  ์•ˆ๋“œ๋กœ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ตœ์†Œ ํ•œ ๊ฐœ ์ด์ƒ์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ํฌํ•จ
    - ์•ฑ์ด ์‹œ์ž‘๋  ๋•Œ ์‹œ์Šคํ…œ์€ ์ง€์ •๋œ '๋ฉ”์ธ' ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฒซ ํ™”๋ฉด์„ ๋ณด์—ฌ์คŒ

 

 

 


์•กํ‹ฐ๋น„ํ‹ฐ์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์—ฐ๊ฒฐ : setContentView()

 

 

  • setContentView()๋ฅผ ์ด์šฉํ•˜์—ฌ ์•กํ‹ฐ๋น„ํ‹ฐ์— ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•œ View๋ฅผ ์„ค์ •

 

๐Ÿ’กR.java ํŒŒ์ผ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปดํŒŒ์ผ ๋  ๋•Œ, ์ž๋™ ์ƒ์„ฑ๋จ
  • res ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค IDํฌํ•จ
  • ํ˜•์‹: R.[๋ฆฌ์†Œ์Šค์œ ํ˜•].[๋ฆฌ์†Œ์Šค์ด๋ฆ„]
  • ์˜ˆ: R.layout.activity_main / R.string.hello / R.drawable.myimage

 

 

 

์•กํ‹ฐ๋น„ํ‹ฐ ๋“ฑ๋ก (Android Manifest)

 

<manifest>
	<application>
    		<activity android:name=".FirstActivity"
            	android:label="First Activity">
            </activity>
    </application>
</manifest>
  • ๋ชจ๋“  Activity์ปดํฌ๋„ŒํŠธ๋Š” Android Manifest.xml์— ๋“ฑ๋ก๋˜์–ด์•ผ ํ•จ
  • AndroidManifest.xml ํŒŒ์ผ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ฌ์žฅ๋ถ€
    (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ •์˜, ์‹œ์Šคํ…œ์ด ์•ฑ์„ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์ค‘์š”ํ•œ ์ง€์‹œ์‚ฌํ•ญ)

 

๐Ÿ’กAndroidMenifest์˜ ์—ญํ• 

  • ํŒจํ‚ค์ง€ ์ด๋ฆ„ ์„ค์ •
    - ์•ฑ์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋กœ์„œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์„ค์ •
    - ์ด ์ด๋ฆ„์€ Google Play์™€ ๊ฐ™์€ ์•ฑ ์Šคํ† ์–ด์—์„œ ์•ฑ์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • ๊ตฌ์„ฑ ์š”์†Œ ์„ ์–ธ
    - ์•กํ‹ฐ๋น„ํ‹ฐ, ์„œ๋น„์Šค, ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„, ์ฝ˜ํ…ํŠธ ํ”„๋กœ๋ฐ”์ด๋” ๊ฐ™์€ ๊ตฌ์„ฑ์š”์†Œ๋“ค์˜ ์กด์žฌ๋ฅผ ์‹œ์Šคํ…œ์— ์•Œ๋ฆผ
  • ๊ถŒํ•œ ์„ค์ •
    - ์•ฑ์ด ์‚ฌ์šฉ์ž์˜ ๊ธฐ๊ธฐ์—์„œ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ๋ช…์‹œ
    - ๋‹ค๋ฅธ ์•ฑ์ด ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ถŒํ•œ ์„ค์ •

 

 


 

 

์•กํ‹ฐ๋น„ํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ (Activity Lifecycle)

 

 

 

์ถœ์ฒ˜: ์„œ์ค€์ˆ˜๋‹˜

 

 

๐Ÿ’ก ์ƒ๋ช… ์ฃผ๊ธฐ ์ˆœ์„œ

 

1) onCreate()

  • ์ƒ๋ช…์ฃผ๊ธฐ ํ†ตํ‹€์–ด์„œ ์ตœ์ดˆ 1๋ฒˆ๋งŒ ์ˆ˜ํ–‰
  • Activity๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜๋ฉฐ, ์ด ์ฝœ๋ฐฑ๋ฉ”์„œ๋“œ๋Š” ๊ผญ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
  • ํ™”๋ฉด Layout ์ •์˜(xml ํŒŒ์ผ ์„ธํŒ…), View ์ƒ์„ฑ, Databinding ๋“ฑ์€ ์ด๊ณณ์— ๊ตฌํ˜„
  • ๋”ฐ๋ผ์„œ Activity ์ตœ์ดˆ ์‹คํ–‰์— ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ ํ•ฉํ•จ

 

2) onStart()

  • Activity๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๊ธฐ ์ง์ „์— (ํ™”๋ฉด์ด ๋งŒ๋“ค์–ด์งˆ ๋•Œ) ํ˜ธ์ถœ๋จ
  • ๋งค์šฐ ๋น ๋ฅธ ์†๋„๋กœ ์‹คํ–‰๋˜๋ฉฐ, ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ Resumed ์ƒํƒœ์— ์ง„์ž…ํ•จ๊ณผ ๋™์‹œ์— onResume() ํ˜ธ์ถœ
  • ํ™”๋ฉด์— ์ง„์ž…ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์ด๊ณณ์— ๊ตฌํ˜„

 

3) onResume()

  • Activity๊ฐ€ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ์งํ›„์— (ํ™”๋ฉด์ด ์‹œ์ž‘๋œ ํ›„) ํ˜ธ์ถœ๋จ
  • ํ˜„์žฌ Activity๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํฌ์ปค์Šค์ธ ๋˜์–ด์žˆ๋Š” ์ƒํƒœ
  • onPause() ์ค‘์— ํ•ด์ œ๋˜๋Š” ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์žฌ๊ฐœ๋  ๋•Œ๋งˆ๋‹ค ํ•„์š”ํ•œ ์ดˆ๊ธฐํ™” ์ž‘์—… ์ˆ˜ํ–‰

 

4) onPause()

  • Activity๊ฐ€ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€์ง€ ์•Š์€ ์งํ›„์—(์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋– ๋‚œ ์ดํ›„์—) ํ˜ธ์ถœ๋จ
  • ํ˜„์žฌ Activity๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํฌ์ปค์Šค์•„์›ƒ ๋˜์–ด์žˆ๋Š” ์ƒํƒœ (๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ์ƒ ๋‹ค๋ฅธ ์•ฑ ํฌ์ปค์Šค, ์ „ํ™”)
  • ๋‹ค๋ฅธ Activity๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ์ž ๊น! ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผํ•จ
  • ๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค, ํ•˜๋“œ์›จ์–ด ์„ผ์„œ ํ• ๋‹น์„ ํ•ด์ œ
  • !! ์—ฌ๊ธฐ์„œ UI๋ฅผ ํ•ด์ œํ•˜๋ฉด ๋ฉ€ํ‹ฐ์œˆ๋„์šฐ์—์„œ๋„ UI๊ฐ€ ์ค‘์ง€๋˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ onStop()์—์„œ ์ค‘์ง€ํ•˜๋„๋ก ํ•˜์ž

 

5) onStop()

  • Activity๊ฐ€ ๋‹ค๋ฅธ Activity์— ์˜ํ•ด 100% ๊ฐ€๋ ค์งˆ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์†Œ๋“œ (ex. ํ™ˆ ํ‚ค ๋ˆ„๋ฅธ ๊ฒฝ์šฐ)
  • ํ™ˆ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ๋กœ์˜ ์ด๋™์ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
  • ์ด ์ƒํƒœ์—์„œ Activity๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, onRestart() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋จ
  • ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ์กฐ์ •
  • CPU๋ฅผ ๋น„๊ต์  ๋งŽ์ด ์†Œ๋ชจํ•˜๋Š” ์ž‘์—…์„ ์ข…๋ฃŒ
  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ผ์‹œ์ค‘์ง€, GPS ์‚ฌ์šฉ ์‹œ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•œ ์œ„์น˜์ธ์‹ '์„ธ๋ฐ€ํ•œ ์œ„์น˜ -> '๋Œ€๋žต์ ์ธ ์œ„์น˜' ์ „ํ™˜
  • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ €์žฅ, ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ, db ํŠธ๋žœ์žญ์…˜, UI ์ค‘์ง€ ๋“ฑ

 

6) onRestart()

  • onStop()์ด ํ˜ธ์ถœ๋œ ์ดํ›„์— ๋‹ค์‹œ ๊ธฐ์กด Activity๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒฝ์šฐ์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์†Œ๋“œ
  • onRestart()๊ฐ€ ํ˜ธ์ถœ๋œ ์ดํ›„ ์ด์–ด์„œ onStart()๊ฐ€ ํ˜ธ์ถœ๋จ

 

7) onDestroy()

  • Activity๊ฐ€ ์™„์ „ํžˆ ์†Œ๋ฉธ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์†Œ๋“œ (์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋  ๋•Œ)
  • ์‚ฌ์šฉ์ž: finish(), onBackPressed()(๊ธฐ์กด ์•กํ‹ฐ๋น„ํ‹ฐ์˜ onResume()๊นŒ์ง€ ํ˜ธ์ถœ๋œ ํ›„ onDestroy() ํ˜ธ์ถœ)
  • ์‹œ์Šคํ…œ: ๋ฉ”๋ชจ๋ฆฌ๋ถ€์กฑ(ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ)
  • onStop(), onDestroy() ๋ฉ”์†Œ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์ด ๋ฐœ์ƒํ•˜๋ฉด ์Šคํ‚ต๋  ์ˆ˜ ์žˆ์Œ

 

 

 

 

๐Ÿ’ก ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์ƒ๋ช…์ฃผ๊ธฐ ํ˜ธ์ถœ

 

์•กํ‹ฐ๋น„ํ‹ฐ ์ƒ์„ฑ์‹œ

  • onCreate() : ์ƒ์„ฑ๋œ ํ™”๋ฉด ์š”์†Œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ
  • onStart(), onResume() : ํ™”๋ฉด์˜ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ ์‹œ์ž‘ (Resumed ์ƒํƒœ)

 

์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ํ™”๋ฉด์—์„œ ์ œ๊ฑฐ์‹œ

  • onPause(), onStop() : ๋’ค๋กœ ๊ฐ€๊ธฐ, finish()๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋™์‹œ ์‹คํ–‰
  • onDestroy() : ์ตœ์ข…์ ์œผ๋กœ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋จ

 

์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ ์‹คํ–‰ ์‹œ (ํ™”๋ฉด์ด ๋ชจ๋‘ ๊ฐ€๋ ค์กŒ์„ ๋•Œ)

  • onPause(), onStop() : ํ˜„์žฌ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ๋งŒ๋“ค์–ด ์งˆ๋•Œ (Stopped ์ƒํƒœ)
  • onStart(), onResume() : ๋‘ ๋ฉ”์„œ๋“œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  Resumed ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋จ

 

์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ ์‹คํ–‰ ์‹œ (ํ™”๋ฉด์ด ๋ชจ๋‘ ๊ฐ€๋ ค์ง€์ง€ ์•Š์•˜์„ ๋•Œ)

  • onPause() : ํ™”๋ฉด์ด ์™„์ „ํžˆ ์‚ฌ๋ผ์ง„ ๊ฒƒ์€ ์•„๋‹˜ (Paused ์ƒํƒœ)
  • onResume() : ์ •์ง€ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ onStart()๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ onResume์œผ๋กœ ๊ฐ (Resumed ์ƒํƒœ)

 

์•กํ‹ฐ๋น„ํ‹ฐ Kill ๊ฐ€๋Šฅ์„ฑ

kill ๊ฐ€๋Šฅ์„ฑ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ Activity ์ƒํƒœ
์ตœ์†Œ Foreground (ํฌ์ปค์Šค๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ํฌ์ปค์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ์˜ˆ์ •) Created, Started, Resumed
์ค‘๊ฐ„ Background (ํฌ์ปค์Šค ์ƒ์‹ค) Paused
์ตœ๋Œ€ Background (๋ณด์ด์ง€ ์•Š์Œ)
Empty
Stopped
Destroyed
  • ์‹œ์Šคํ…œ์€ RAM(๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„)์— ์—ฌ์œ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์ง์ ‘ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ kill
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ๋ชจ๋“  ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ kill๋จ

 

 

  1. ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ ์ฒซ ๋ฒˆ์งธ (๋งํฌ)
  2. ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ ๋‘ ๋ฒˆ์งธ (๋งํฌ)

 

 

 

 

 


 

 

์•กํ‹ฐ๋น„ํ‹ฐ ์Šคํƒ (Activity stack)

 

 

 

 

๐Ÿ’กTask

 

 

  • ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” Task(ํƒœ์Šคํฌ)๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์˜ ์ˆœ์„œ์™€ ํ๋ฆ„์„ ๊ด€๋ฆฌ
  • Task : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹คํ–‰๋˜๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์Šคํƒ
  • ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ํ˜ธ์ถœ ํ•  ๋•Œ๋งˆ๋‹ค ์Šคํƒ์ด ์Œ“์ž„
  • ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” ํ™”๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์ชฝ
  • Back ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฐ€์žฅ ์œ„ ํ˜„์žฌ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ , ๊ทธ ์•„๋ž˜์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํ™”๋ฉด์— ์ถœ๋ ฅ
  • ๊ฐ€์žฅ ์•„๋ž˜ base activity(๊ธฐ๋ณธ ์•กํ‹ฐ๋น„ํ‹ฐ)๊ฐ€ ์žˆ๊ณ , ์ฃผ๋กœ ํ™ˆ ํ™”๋ฉด์ด ๋“ค์–ด๊ฐ

 

 

 

 

๐Ÿ’กํƒœ์Šคํฌ vs ํ”„๋กœ์„ธ์Šค

 

 

Process

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๋‹จ์œ„(ํ๋ฆ„)
  • ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์‹คํ–‰์ฝ”๋“œ์™€ ๊ฐ์ฒด๋ฅผ ํฌํ•จ

 

Task

  • ํ”„๋กœ์„ธ์Šค์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์‹คํ–‰๋˜๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ์ •๋ณด๋ฅผ ์ €์žฅ
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™”๋ฉด ํ๋ฆ„ ๊ด€๋ฆฌ
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹คํ–‰๋˜๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ๋งŒ ํฌํ•จ (๋‹ค๋ฅธ Process์˜ ์•กํ‹ฐ๋น„ํ‹ฐ ๋˜ํ•œ ํฌํ•จ ๊ฐ€๋Šฅ)

 

 

 

 

๐Ÿ’ก์•กํ‹ฐ๋น„ํ‹ฐ ์Šคํƒ (Activity Stack)

  • ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹๋ฌธ์„œ์—๋„ ๋‚˜์™€์žˆ์ง€๋งŒ, ๊ฐœ๋…๋งŒ ์•Œ๊ณ  ๋˜๋„๋ก ๊ฑด๋“ค์ง€ ์•Š๋Š” ๊ฒŒ ์ข‹์Œ
    (๊ผฌ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž๋“ค์ด ์˜ˆ์ƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋™์ž‘์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์–ด ๋ถˆํŽธํ•จ ์•ผ๊ธฐ)
  • ๊ตณ์ด ์„ค์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด
    1. AndroidManifest.xml ํŒŒ์ผ์—์„œ launchMode ์„ค์ • <activity android:launchMode="์„ค์ •๊ฐ’">
    2. Intent Flag๋ฅผ ์ด์šฉ

 

 

 

Standard

 

์ถœ์ฒ˜:&nbsp;https://apro-developer.tistory.com/49

 

  • ์„ค์ •ํ•˜์ง€ ์•Š์•˜์„ ์‹œ ๊ธฐ๋ณธ๊ฐ’
  • ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์œ„์— ์Œ“์ž„ (LIFO, ํ›„์ž…์„ ์ถœ)
  • ์ธ์Šคํ„ด์Šค๊ฐ€ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ƒ๊น€

 

 

 

SingleTop

 

 

  • ์Šคํƒ ๋‹ค๋“œ์™€ ์œ ์‚ฌํ•˜๋‚˜, ๊ฐ€์žฅ ์œ„(Top)์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ์ค‘๋ณตํ•ด์„œ ์Œ“์ด์ง€ ์•Š์Œ
  • ๋”ฐ๋ผ์„œ ์ค‘๋ณต์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์€ ํ™œ๋™์˜ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋กœ ๋ผ์šฐํŒ…
  • ๊ฐ€์žฅ ์œ„์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ค‘๋ณต์ด ๊ฐ€๋Šฅํ•จ

 

 

SingleTask

 

 

  • ์Œ“์—ฌ์žˆ๋˜ ์Šคํƒ์€ ๋‚จ์•„์žˆ๊ณ , ์ƒˆ๋กœ์šด ์Šคํƒ ๊ณต๊ฐ„์ด ํ•˜๋‚˜ ๋” ์ƒ๊น€
  • ์ƒˆ๋กœ ์ƒ๊ธด ์Šคํƒ ๊ณต๊ฐ„์— ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ ์Šคํƒ์ด ์Œ“์ž„
  • ํ™œ๋™์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ด๋ฏธ ์ž‘์—…์— ์žˆ๋‹ค๋ฉด ์‹œ์Šคํ…œ์€ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋กœ ๋ผ์šฐํŒ…
  • ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„  ์Šคํƒ ๋‹ค๋“œ์™€ ๋˜‘๊ฐ™์ด ๋Š๊ปด์ง

 

 

SingleInstance

 

 

  • ์Œ“์—ฌ์žˆ๋˜ ์Šคํƒ์€ ๋‚จ์•„์žˆ๊ณ , ์ƒˆ๋กœ์šด ์Šคํƒ ๊ณต๊ฐ„์ด ํ•˜๋‚˜ ๋” ์ƒ๊น€
  • ์ƒˆ๋กœ ์ƒ๊ธด ์Šคํƒ ๊ณต๊ฐ„์— ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ ์Šคํƒ์ด ์Œ“์ด์ง€ ์•Š์Œ (SingleTask์™€์˜ ์ฐจ์ด์ )
  • ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, ๊ธฐ์กด์— ์žˆ๋˜ ์Šคํƒ๊ณต๊ฐ„์— ์Œ“์ž„

 

 

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T