[ANDROID] ์•กํ‹ฐ๋น„ํ‹ฐ ์ƒํƒœ ๋ณ€๊ฒฝ

๊ฐœ์š” 

  1. ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ์ƒํƒœ์— ๋Œ€ํ•ด ์ดํ•ดํ•œ๋‹ค.
  2. ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์œ ๋ฐœํ•˜๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ํŒŒ์•…ํ•œ๋‹ค.
  3. ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ์˜ ๋ณ€ํ™”๋ฅผ ์ดํ•ดํ•œ๋‹ค.

 

์•กํ‹ฐ๋น„ํ‹ฐ ๊ตฌ์„ฑ์˜ ๋ณ€๊ฒฝ


์•กํ‹ฐ๋น„ํ‹ฐ์˜ ๊ตฌ์„ฑ์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ฐ€์žฅ ๋งŽ์ด ์ผ์–ด๋‚˜๋Š” ์˜ˆ๋กœ๋Š” ์„ธ๋กœ ๋ชจ๋“œ์™€ ๊ฐ€๋กœ ๋ชจ๋“œ๊ฐ„ ๋ฐฉํ–ฅ ๋ณ€ํ™”์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ตฌ์„ฑ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ์ œ๊ฑฐ๋˜๊ณ  ์™„์ „ํžˆ ์ƒˆ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, onPause(), onStop() ๋ฐ onDestory() ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ์ด ๋˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์ด ์ผ์–ด๋‚˜๋ฉด ์œ ์ง€๋˜๊ณ  ์žˆ๋˜ UI ์ƒํƒœ๋ฅผ ์™„์ „ํžˆ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

UI ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ViewModel, onSaveInstanceState() ๋ฉ”์„œ๋“œ ๋˜๋Š” ์˜๊ตฌ ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ์กฐํ•ฉ์„ ํ™œ์šฉํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ• ์ง€๋Š” UI ๋ฐ์ดํ„ฐ์˜ ๋ณต์žก์„ฑ, ์•ฑ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋Œ€๋น„ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ฒฐ์ •ํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. 

 

๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ


์•ฑ์ด ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜๋ฉด ์‹œ์Šคํ…œ์€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์•กํ‹ฐ๋น„ํ‹ฐ์—๊ฒŒ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์•กํ‹ฐ๋น„ํ‹ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ „ํ™˜์„ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ ๋ชจ๋“œ์—์„œ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ์•ฑ์ด ๋‘๊ฐœ ์žˆ๋”๋ผ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์žˆ๋Š” ์•ฑ๋งŒ ํฌ๊ทธ๋ผ์šด๋“œ์— ์žˆ์œผ๋ฉฐ ํฌ์ปค์Šค๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” '๋‹ค์‹œ ์‹œ์ž‘๋จ' ์ƒํƒœ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์ง€๋งŒ, ๋‹ค๋ฅธ ์ฐฝ์˜ ์•ฑ์€ '์ผ์‹œ์ค‘์ง€๋จ' ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ A์—์„œ ์•ฑ B๋กœ ์ „ํ™˜ํ•  ๋•Œ ์‹œ์Šคํ…œ์€ ์•ฑ A์— onPause()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์•ฑ B์— onResume()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์ „ํ™˜ํ•  ๋•Œ๋งˆ๋‹ค ์œ„์˜ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

 

ํฌ์ปค์Šค์˜ ๋ณ€๊ฒฝ


์ƒˆ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ๋‚˜์˜ด์— ๋”ฐ๋ผ ํฌ์ปค์Šค๋ฅผ ์–ป๊ฒŒ๋˜๊ณ  ์ง„ํ–‰์ค‘์ด์˜€๋˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๊ฐ€๋ฆฌ๊ฒŒ ๋˜๋ฉด ๊ฐ€๋ ค์ง„ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ํฌ์ปค์Šค๋ฅผ ์žƒ๊ณ  '์ผ์‹œ์ค‘์ง€๋จ' ์ƒํƒœ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‹œ์Šคํ…œ์€ ๊ทธ ์•กํ‹ฐ๋น„ํ‹ฐ์— onPause()๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.  

๋งŒ์•ฝ์— ๊ฐ€๋ ค์กŒ๋˜ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํฌ๊ทธ๋ผ์šด๋“œ์— ๋Œ์•„์™€์„œ ํฌ์ปค์Šค๋ฅผ ๋‹ค์‹œ ์–ป๊ฒŒ๋˜๋ฉด ์‹œ์Šคํ…œ์€ onResume()๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํฌ๊ทธ๋ผ์šด๋“œ์— ๋‚˜์˜ด์— ๋”ฐ๋ผ ์ง„ํ–‰์ค‘์ด๋˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋ถ€๋ถ„์ ์ด ์•„๋‹Œ ์™„์ „ํ•˜๊ฒŒ ๊ฐ€๋ฆฌ๊ฒŒ ๋˜๋ฉด ๊ฐ€๋ ค์ง„ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” '์ค‘์ง€๋จ' ์ƒํƒœ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‹œ์Šคํ…œ์€ onPause()์™€ onStop()์„ ๋น ๋ฅด๊ฒŒ ์—ฐ์†์ ์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

'์ค‘์ง€๋จ' ์ƒํƒœ๋กœ ์žˆ๋˜ ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ค๋ฉด ์‹œ์Šคํ…œ์€ ์•กํ‹ฐ๋น„ํ‹ฐ์— onRestart(), onStart(), onResume()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค๋ผ๋ฉด onStart()์™€ onResume()๋งŒ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ํƒญํ•œ ๊ฒฝ์šฐ


์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํฌ๊ทธ๋ผ์šด๋“œ์— ๋‚˜์™€์žˆ๋Š” ์ƒํƒœ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ํƒญํ•˜๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” onPause(), onStop() ๋ฐ onDestory() ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑฐ์น˜๋ฉฐ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ์ œ๊ฑฐ๋  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐฑ ์Šคํƒ์—์„œ๋„ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ onSaveInstaceState() ์ฝœ๋ฐฑ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ธ์ง€ํ•˜๊ณ  ์žˆ์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ƒํ™ฉ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋กœ ๋Œ์•„์˜ค์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก , onBackPressed() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ํŠน์ •ํ•œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. onBackPressed() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ๋•Œ๋Š” super.onBackPressed()๋ฅผ ํ˜ธ์ถœํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ต‰์žฅํžˆ ๋ถ€์ž์—ฐ์Šค๋Ÿฌ์šด ๋™์ž‘์œผ๋กœ ๋ณด์ผ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์•ฑ ๊ฐ•์ œ์ข…๋ฃŒ


 

ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ

์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ๋Š”๋ฐ ์‹œ์Šคํ…œ์ด ํฌ๊ทธ๋ผ์šด๋“œ์— ์œ„์น˜ํ•œ ์•ฑ์„ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•ด์•ผ ํ•˜๋ฉด ์‹œ์Šคํ…œ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•ฑ์„ ๊ฐ•์ œ ์ข…๋ฃŒ ์‹œํ‚ฌ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ํŠน์ • ์•ฑ์„ ์ข…๋ฃŒํ•  ๊ฐ€๋Šฅ์„ฑ์€ ๊ทธ ์‹œ์ ์˜ ์•ฑ์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์•ฑ์˜ ์ •์ง€๋จ - ์ผ์‹œ์ •์ง€๋จ - ์ƒ์„ฑ,์‹œ์ž‘,์žฌ๊ฐœ๋จ ์ˆœ์œผ๋กœ ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.

 

Reference

https://developer.android.com/guide/components/activities/state-changes?hl=ko

 

ํ™œ๋™ ์ƒํƒœ ๋ณ€๊ฒฝ ์ฒ˜๋ฆฌ  |  Android ๊ฐœ๋ฐœ์ž  |  Android Developers

ํ™œ๋™์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ „ํ™” ๊ฑธ๊ธฐ, ์‚ฌ์ง„ ์ฐ๊ธฐ, ์ด๋ฉ”์ผ ๋ณด๋‚ด๊ธฐ ๋˜๋Š” ์ง€๋„ ๋ณด๊ธฐ์™€ ๊ฐ™์€ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด์„ ์ œ๊ณตํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ™œ๋™์—๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ฐฝ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค…

developer.android.com