AsyncTask

μ•ˆλ“œλ‘œμ΄λ“œ Main thread(UI thread)

μ•ˆλ“œλ‘œμ΄λ“œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ˜λ©΄ μ•ˆλ“œλ‘œμ΄λ“œ μ‹œμŠ€ν…œμ€ ν•˜λ‚˜μ˜ μ‹€ν–‰ μŠ€λ ˆλ“œλ‘œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ΅¬μ„±μš”μ†Œκ°€ 생성될 λ•Œ λ³„λ„μ˜ μŠ€λ ˆλ“œκ°€ μƒμ„±λ˜λŠ” 것은 μ•„λ‹ˆλ©° μ•žμ„œ λ§ν•œ ν•˜λ‚˜μ˜ μ‹€ν–‰ μŠ€λ ˆλ“œμ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. 이 μŠ€λ ˆλ“œλ₯Ό Main thread라고 ν•©λ‹ˆλ‹€.

μ•ˆλ“œλ‘œμ΄λ“œ μ‹œμŠ€ν…œμ— μ˜ν•΄ μƒμ„±λœ 이 Main threadλŠ” ν™”λ©΄ ꡬ성에 κ΄€ν•œ 역할을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ Button, CheckBox, TextView λ“±μ˜ UI도ꡬ ν‚€νŠΈ κ΅¬μ„±μš”μ†Œλ₯Ό 생성 및 μ‘°μž‘ν•˜μ˜€μ„ λ•Œ μƒν˜Έμž‘μš©ν•˜λŠ” μŠ€λ ˆλ“œκ°€ Main threadμž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ λ°˜μ‘μ„± 쒋은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“œλ €λ©΄ μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ€ main thread에 κ΅¬ν˜„ν•˜μ§€ μ•Šκ³  λ³„λ„μ˜ threadμ—μ„œ λ™μž‘ν•˜λ„λ‘ κ΅¬ν˜„ν•˜λ©΄ λ©λ‹ˆλ‹€.

λ§Œμ•½ κ°œλ°œμžκ°€ 데이터λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” μž‘μ—…μ„ Main Thread(UI thread)에 κ΅¬ν˜„ν•˜μ˜€λ‹€λ©΄ λ‹€μš΄λ‘œλ“œκ°€ μ™„λ£Œλ λ•ŒκΉŒμ§€ 화면은 λ©ˆμΆ”μ–΄ μžˆλŠ”κ²ƒ 처럼 λ³΄μΌκ²ƒμž…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 점듀이 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ°˜μ‘μ„±μ„ λ–¨μ–΄μ§€κ²Œ λ§Œλ“€κ³  μ‚¬μš©μžλŠ” 닡닡함을 느끼게 λ©λ‹ˆλ‹€.

UI threadκ°€ μ•„λ‹Œ μŠ€λ ˆλ“œμ—μ„œλŠ” UI κ΅¬μ„±μš”μ†Œλ₯Ό μ‘°μž‘ν•˜λŠ” 것은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

UI μž…μž₯μ—μ„œ λ΄€μ„λ•Œ UI λ™μž‘μ€ 단일 μŠ€λ ˆλ“œλ‘œ λ™μž‘ν•˜λŠ” ꡬ쑰. λ”°λΌμ„œ UI threadμ—μ„œ μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것은 κ·Έ μž‘μ—…μ΄ μˆ˜ν–‰λ˜λŠ” λ™μ•ˆ UIμ—…λ°μ΄νŠΈκ°€ μ§€μ—° 되고 μžˆλ‹€λŠ” 것을 의미.

AsyncTask κ°œλ…

앱이 μ‹€ν–‰λ˜λ©° μ•ˆλ“œλ‘œμ΄λ“œ μ‹œμŠ€ν…œμ€ 메인 μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 이 μŠ€λ ˆλ“œλŠ” μ•ˆλ“œλ‘œμ΄λ“œ UI νˆ΄ν‚·μ— μ ‘κ·Όν•©λ‹ˆλ‹€. μ‚¬μš©μžμ˜ μž…λ ₯을 κΈ°λ‹€λ¦¬κ±°λ‚˜ λ””λ°”μ΄μŠ€ 화면에 κ·Έλ¦¬λŠ” μž‘μ—…λ“±μ„ λ‹€λ£Ήλ‹ˆλ‹€. κ·Έλž˜μ„œ UI μŠ€λ ˆλ“œ 라고 λΆ€λ¦…λ‹ˆλ‹€.

μ•±μ˜ λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈ(Activity, Service, Content Provider. Broadcastreceiver λ“±)듀은 같은 μŠ€λ ˆλ“œ λ‚΄μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. ν•„μš”μ— 따라 μΆ”κ°€ μŠ€λ ˆλ“œλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. UI μŠ€λ ˆλ“œκ°€ thread-safeν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μŠ€λ ˆλ“œ μ‚¬μš©μ‹œ λ‹€μŒ 2κ°€μ§€λ₯Ό μ§€μΌœμ•Ό ν•©λ‹ˆλ‹€.

  • UI μŠ€λ ˆλ“œκ°€ λΈ”λ‘λ˜μ§€ μ•Šλ„λ‘ ν•΄μ•Όν•©λ‹ˆλ‹€.

  • UI μŠ€λ ˆλ“œ 외에 λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ UI μ»΄ν¬λ„ŒνŠΈ 접근을 ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€.

μœ„μ—μ„œ UI μŠ€λ ˆλ“œλŠ” λΈ”λ‘λ˜λ©΄ μ•ˆλœλ‹€ ν–ˆλŠ”λ° μ•ˆλ“œλ‘œμ΄λ“œλŠ” single thread modelλͺ¨λΈμ„ λ”°λ₯΄κΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ μƒκΉλ‹ˆλ‹€. 였랜 μ‹œκ°„μ΄ κ±Έλ¦¬λŠ” μž‘μ—…μ„ UI μŠ€λ ˆλ“œμ—μ„œ μˆ˜ν–‰ν•œλ‹€λ©΄ μž‘μ—…μ΄ μ™„λ£Œ λ λ•Œ κΉŒμ§€ UIμŠ€λ ˆλ“œκ°€ λŒ€κΈ°ν•΄μ•Ό ν•˜λ―€λ‘œ UIλŠ” 먹톡이 λ©λ‹ˆλ‹€.

UI λ°˜μ‘μ„± ν–₯상과 μ²˜λ¦¬μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μž‘μ—… 처리λ₯Ό 같이 ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„  λ³„λ„μ˜ μŠ€λ ˆλ“œκ°€ ν•„μš”ν•©λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ λ„€νŠΈμ›Œν¬ κ΄€λ ¨ μ²˜λ¦¬λŠ” 메인 μŠ€λ ˆλ“œμ—μ„œ μˆ˜ν–‰ν•˜λŠ”κ²Œ κΈˆμ§€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

이문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œλŠ” Handler, Runnable, AsyncTask등을 μ œκ³΅ν•©λ‹ˆλ‹€. AsyncTaskλŠ” 메인 μŠ€λ ˆλ“œμ—μ„œ 생성후 μ‹€ν–‰λ˜λ©°, 메인 μŠ€λ ˆλ“œμ—μ„œ μ²˜λ¦¬μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ„ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ‘œ λ„˜κΈ°κ³  계속 메인 μŠ€λ ˆλ“œ μž‘μ—…μ„ μ§„ν–‰ ν•˜κΈ°μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. AsyncTaskλ₯Ό μ‹€ν–‰μ‹œμΌœλ†“κ³  λ©”μΈμŠ€λ ˆλ“œλŠ” λ‹€μŒ μž‘μ—…μ„ λ°”λ‘œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Reference

Last updated

Was this helpful?