๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Android

Android:: countDownTimer & Lifecycle

by ๋„์บ๋ฆฌ๐Ÿฑ 2020. 7. 21.
๋ฐ˜์‘ํ˜•

โ— CountDownTimer

https://stackoverflow.com/questions/5738362/pause-countdowntimer-in-android-when-activity-is-not-in-front

https://iw90.tistory.com/127

https://developer.android.com/reference/android/os/CountDownTimer

 

// 30์ดˆ๋ฅผ 1์ดˆ ๋‹จ์œ„๋กœ ์นด์šดํŠธ ๋‹ค์šด ํ•˜๋Š” ์นด์šดํŠธ๋‹ค์šดํƒ€์ด๋จธ

 new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();

 

// ์ƒ์„ฑ์ž

CountDownTimer(long millisInFuture, long countDownInterval)

 

// method๋“ค

cancel () - ์นด์šดํŠธ ๋‹ค์šด ์ทจ์†Œ

onFinish() - ์‹œ๊ฐ„์ด ๋‹ค ๋˜๋ฉด callback ๋งŒ๋ฃŒ

onTick(long millisUntilFinished) 

start()- ์นด์šดํŠธ ๋‹ค์šด ์‹œ์ž‘

 

// ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ onPause ๋  ๋•Œ, ํƒ€์ด๋จธ๋ฅผ ๋ฉˆ์ถ”์–ด ๋†“๊ณ  ์‹ถ์—ˆ๋‹ค.  ๊ทธ๋Ÿด ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•˜๋‚˜?

1) ํด๋ž˜์Šค ์ „์ฒด์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” bool๊ฐ’ IsPause ์ •์˜.

2) ๋‘๊ฐœ์˜ ์นด์šดํŠธ ํƒ€์ด๋จธ ์ •์˜.(countDownTimer , countDownTimeronResume)

3) onResume()์— IsPause๊ฐ€ false ์ผ๋•Œ๋Š”, ์›๋ž˜ ์‹œ๊ฐ„ ๋ถ€ํ„ฐ ์นด์šดํŠธ ๋‹ค์šด ํ•˜๋Š” ํƒ€์ด๋จธ(countDownTimer) ์‚ฌ์šฉ, true์ผ ๊ฒฝ์šฐ ๋‚จ์€ ์‹œ๊ฐ„ ๋ถ€ํ„ฐ ์นด์šดํŠธ ๋‹ค์šดํ•˜๊ฒŒ ํ•˜๋Š” ํƒ€์ด๋จธ(countDownTimeronResume) ์‚ฌ์šฉ. ๋‘๊ฐœ์˜ ํƒ€์ด๋จธ๋ฅผ onResume()์— ์„ค์ •ํ•˜๊ณ  if~else~๋ฌธ์„ ๊ฑฐ์นœ๋‹ค์Œ์— ์‹คํ–‰.

4) onPause()์‹œ์— ์›๋ž˜ ์‹œ๊ฐ„ ๋ถ€ํ„ฐ ์นด์šดํŠธ ๋‹ค์šด ํ•˜๋Š” ํƒ€์ด๋จธ(countDownTimer)๊ฐ€ null ์ด ์•„๋‹ˆ๋ฉด ์ด ํƒ€์ด๋จธ์˜ ์นด์šดํŠธ ํƒ€์ด๋จธ๋ฅผ ์ทจ์†Œํ•˜๊ณ (cancel()), IsPause๋ฅผ ture ๊ฐ’์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ๋งŒ์•ฝ ๋‚จ์€ ์‹œ๊ฐ„ ๋ถ€ํ„ฐ ์นด์šดํŠธ ๋‹ค์šดํ•˜๊ฒŒ ํ•˜๋Š” ํƒ€์ด๋จธ(countDownTimeronResume)๊ฐ€ null ์ด ์•„๋‹ˆ๋ฉด ์ด ํƒ€์ด๋จธ๋ฅผ ์ทจ์†Œํ•œ๋‹ค. 

 

 

โ— Activity, LifeCycle

https://siadaddy-cordinglife.tistory.com/12

https://re-build.tistory.com/4

Q) Main Activity์—์„œ Detail Activity๋ฅผ ํ˜ธ์ถœ ํ–ˆ์„ ๋•Œ, ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ?

[Main] onPause

[Detail] onCreate

[Detail] onStart

[Detail] onResume

[Main] onStop

 

Q) Detail Activity๋ฅผ ์ข…๋ฃŒ ํ›„ Main Activity ๋ณด์—ฌ์งˆ ๋•Œ ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ˜ธ์ถœ ์ˆœ์„œ?

[Detail] onPause

[Main] onRestart

[Main] onStart

[Main] onResume

[Detail] onStop

[Detail] onDestroy

 

Q) ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ?

- ์‚ฌ์šฉ์ž๊ฐ€ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์•กํ‹ฐ๋น„ํ‹ฐ ์ข…๋ฃŒํ•œ ๊ฒฝ์šฐ

- ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ์„ ๋•Œ ์‹œ์Šคํ…œ ๋ฉ”๋กœ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง„ ๊ฒฝ์šฐ

- ์–ธ์–ด ์„ค์ • ๋ณ€๊ฒฝ ์‹œ

- ํ™”๋ฉด ๊ฐ€๋กœ/์„ธ๋กœ ํšŒ์ „ ์‹œ

- ํฐํŠธ ํฌ๊ธฐ๋‚˜ ํฐํŠธ ๋ณ€๊ฒฝ ์‹œ

โ–ถ onSaveInstanceState ๋ฉ”์„œ๋“œ ์ด์šฉํ•ด์„œ ์•กํ‹ฐ๋น„ํ‹ฐ ์ข…๋ฃŒํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. (์•„๋ž˜ url ์ฐธ๊ณ )

https://snowdeer.github.io/android/2017/08/16/android-on-save-instance-state/

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

Q) ํ”„๋ž˜๊ทธ ๋จผํŠธ๋ž€?

https://tedrepository.tistory.com/5

 

์•ˆ๋“œ๋กœ์ด๋“œ - ํ”„๋ž˜๊ทธ๋จผํŠธ(Fragment) ํŒŒํ—ค์น˜๊ธฐ

1.ํ”„๋ž˜๊ทธ๋จผํŠธ (fragment) ๋ž€? ํ”„๋ž˜๊ทธ๋จผํŠธ (fragment) ๋Š” ํ•˜๋‚˜์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™”๋ฉด์„ ๊ฐ€์ง€๋„๋ก ๋งŒ๋“ค๊ธฐ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ํ™”๋ฉด์„ ๊ฐ€์ง„ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์ด ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ  ํ•˜๋‚˜

tedrepository.tistory.com

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€