๐ฑ dreaming DiNO
[Android] ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ค๋ฃจ๊ธฐ Thread, Looper, Handler ๋ณธ๋ฌธ
์๋๋ก์ด๋ UI๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋ ๋ชจ๋ธ๋ก ์๋ํ๋ฏ๋ก, ์ด ์ํฅ์ ๊ณ ๋ คํด ๊ฐ๋ฐํ์ง ์์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฉ์ธ ์ค๋ ๋์์ ๊ธด ์์ ์ ํ๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ์ฌ๋ถ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์ค๋ ๋์์ UI ์ค๋ ๋๋ก ์ ๊ทผํ ์ ์๋๋ก ์๋๋ก์ด๋์์ ์ ๊ณตํ๋ ์ค๋ ๋ ๊ฐ ํต์ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
์๊ฐ
์๋๋ก์ด๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด ์์คํ ์ ๋ฉ์ธ ์กํฐ๋นํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฌ๋ ค ํ๋ก์ธ์ค๋ก ๋ง๋ค๋ฉฐ, ์ด ๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๋ฉ์ธ ์ค๋ ๋๋ ์๋๋ก์ด๋์ ์ฃผ์ ์ปดํผ๋ํธ๋ฅผ ์คํํ๋ ๊ณณ์ด์ UI๋ฅผ ๊ทธ๋ฆฌ๊ฑฐ๋ ๊ฐฑ์ ํ๋ ์ผ์ ๋ด๋นํ ์ ์๋ ์ ์ผํ ์ค๋ ๋์ด๋ฏ๋ก UI ์ค๋ ๋๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
์๋๋ก์ด๋ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋ทฐ๋ ๋ทฐ๊ทธ๋ฃน์ ํ๋์ ์ค๋ ๋์์๋ง ๋ด๋นํ๋ ์์น์ ์ฑ๊ธ ์ค๋ ๋ ๋ชจ๋ธ์ด๋ผ๊ณ ํฉ๋๋ค. ์ฑ๊ธ ์ค๋ ๋ ๋ชจ๋ธ์ ๊ท์น์ ์ฒซ์งธ, ๋ฉ์ธ ์ค๋ ๋(UI ์ค๋ ๋)๋ฅผ ๋ธ๋ญํ์ง ๋ง ๊ฒ, ๋์งธ, ์๋๋ก์ด๋ UI ํดํท์ ์ค์ง UI ์ค๋ ๋์์๋ง ์ ๊ทผํ ์ ์๋๋ก ํ ๊ฒ, ์ด ๋ ๊ฐ์ง์ ๋๋ค. ์ด๋ฐ ์ฑ๊ธ ์ค๋ ๋ ๋ชจ๋ธ์ ์ํฅ์ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ๊ธด ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์ ์ ๋ฉ์ธ ์ค๋ ๋์์ ๋ด๋นํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ์ด ๋ฎ์์ง ์ ์๊ณ , ๊ธ๊ธฐ์ผ ์ฌ์ฉ์์ ๋ถํธํจ์ ๋ฐฉ์งํ๊ณ ์ ์์คํ ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ANR(Appication Not Responding) ์ํ๋ก ์ ํ์ํฌ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์ ์ ํ๋ ์ฝ๋๋ ์ฌ๋ถ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ธ ์ค๋ ๋์์ ๋ถ๋ฆฌํด์ผ ํ๊ณ , ์์ฐ์ค๋ฝ๊ฒ ๋ฉ์ธ ์ค๋ ๋์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํต์ ํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ๊ฒ ๋ฉ๋๋ค.
๋ค๋ฅธ ์ค๋ ๋์์ ๋ฉ์ธ ์ค๋ ๋๋ก ์ ๊ทผํ๊ธฐ ์ํด Looper์ Handler๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์๋๋ก์ด๋๋ Java์ Thread๋ฅผ ์ข ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ํํ HandlerThread, ๋ ๋์๊ฐ Thread๋ Message Loop ๋ฑ์ ์๋ ์๋ฆฌ๋ฅผ ํฌ๊ฒ ๊ณ ๋ คํ์ง ์๊ณ ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ AsyncTask ๋ฑ์ ํด๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์์๋ ๋จผ์ Thread-Looper-Handler์ ๊ฐ๋ ์ ์ดํดํ๊ณ , ๋์๊ฐ HandlerThread์ AsyncTask์ ๋ํด ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ฐ ๊ฐ๋ฐ ๋ด์ค๋ฅผ ๋ ๋ง๋๋ณด์ธ์
Looper์ Handler์ ์ฌ์ฉ ๋ชฉ์
์ ์๋๋ก์ด๋๋ ๋ฉ์ธ ์ค๋ ๋์์๋ง UI ์์ ์ด ๊ฐ๋ฅํ๋๋ก ์ ํํ ๊น์? ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ ์ค๋ ๋๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ๋๊ณ ์์ ๋, ๋ฉ์ธ ์ค๋ ๋์ ๋ค๋ฅธ ์ค๋ ๋, ๋ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ๋์์ ๊ฐ์ ํ ์คํธ๋ทฐ์ setText()๋ฅผ ์๋ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๋ฉด ๊ฐ๋จํฉ๋๋ค.
๋ ์ค ์ด๋ ์ค๋ ๋์ setText()๊ฐ ์ ์ฉ๋ ์ง ์์ธกํ ์ ์๊ณ , ์ฌ์ฉ์๋ ๋ ์ค ํ๋์ ๊ฐ๋ง์ ๋ณผ ์ ์์ด ๋ค๋ฅธ ํ ์ค๋ ๋์ ๊ฒฐ๊ณผ๋ ๋ฒ๋ ค์ง๋๋ค. ์ด๊ฐ์ด ๋ ๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ ๋์ ๋๊ธฐํ ์ด์๋ฅผ ์ฐจ๋จํ๊ธฐ ์ํด์ Looper์ Handler๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
Looper์ Handler์ ์๋ ์๋ฆฌ
๋จผ์ ์ค๋ ๋์ Looper, Handler๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์์๋ณผ๊น์? ๋ฉ์ธ ์ค๋ ๋๋ ๋ด๋ถ์ ์ผ๋ก Looper๋ฅผ ๊ฐ์ง๋ฉฐ ๊ทธ ์์๋ Message Queue๊ฐ ํฌํจ๋ฉ๋๋ค. Message Queue๋ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ค๋ ๋๋ ํน์ ์๊ธฐ ์์ ์ผ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ Message๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ์ ์ถ ํ์์ผ๋ก ๋ณด๊ดํ๋ Queue์ ๋๋ค. Looper๋ Message Queue์์ Message๋ Runnable ๊ฐ์ฒด๋ฅผ ์ฐจ๋ก๋ก ๊บผ๋ด Handler๊ฐ ์ฒ๋ฆฌํ๋๋ก ์ ๋ฌํฉ๋๋ค. Handler๋ Looper๋ก๋ถํฐ ๋ฐ์ Message๋ฅผ ์คํ, ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ค๋ฅธ ์ค๋ ๋๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์์ Message Queue์ ๋ฃ๋ ์ญํ ์ ํ๋ ์ค๋ ๋ ๊ฐ์ ํต์ ์ฅ์น์ ๋๋ค.
์ด์ Handler์ Looper, Message Queue์ ๋ํด ์ข ๋ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Handler
Handler๋ ์ค๋ ๋์ Message Queue์ ์ฐ๊ณํ์ฌ Message๋ Runnable ๊ฐ์ฒด๋ฅผ ๋ฐ๊ฑฐ๋ ์ฒ๋ฆฌํ์ฌ ์ค๋ ๋ ๊ฐ์ ํต์ ์ ํ ์ ์๋๋ก ํฉ๋๋ค. Handler ๊ฐ์ฒด๋ ํ๋์ ์ค๋ ๋์, ํด๋น ์ค๋ ๋์ Message Queue์ ์ข ์๋ฉ๋๋ค. ์๋ก Handler ๊ฐ์ฒด๋ฅผ ๋ง๋ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ง๋ ์ค๋ ๋์ ํด๋น ์ค๋ ๋์ Message Queue์ ๋ฐ์ธ๋๋ฉ๋๋ค. ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํน์ ์ค๋ ๋์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ค๋ฉด ํน์ ์ค๋ ๋์ ์ํ Handler์ post๋ sendMessage ๋ฑ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ฉ๋๋ค. ์์ Message Queue๋ ์ ๋ฌ๋ฐ์ Message๋ฅผ ์ ์ ์ ์ถ ํ์์ผ๋ก ๋ณด๊ดํ๋ค๊ณ ์ค๋ช ํ์ง๋ง, ์ ๋ฌ ์์ ์ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Queue์ ๋งจ ์๋ก ๋ณด๋ด๊ฑฐ๋, ์ํ๋ ๋งํผ Message๋ Runnable ๊ฐ์ฒด์ ์ ์ก์ ์ง์ฐ์ํฌ ์๋ ์์ต๋๋ค. ์์ฃผ ์ฐ์ด๋ Handler์ ๋ฉ์๋๋ฅผ ์๋ ํ์ ์ ๋ฆฌํ์ต๋๋ค.
void | handleMessage | Message msg | Looper๊ฐ Message Queue์์ ๊บผ๋ด์ค Message๋ Runnable ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌ (์์ ์ ๊ตฌํ ํ์) |
final boolean | post | Runnable r | Message Queue์ Runnable r์ ์ ๋ฌ |
final boolean | sendMessage | Message msg | Message Queue์ Message msg๋ฅผ ์ ๋ฌ |
final boolean | postAtFrontOfQueue | Runnable r | Message Queue์ ๋งจ ์์ Runnable r์ ์ ๋ฌ |
final boolean | sendMessageAtFrontOfQueue | Message msg | Message Queue์ ๋งจ ์์ Message msg๋ฅผ ์ ๋ฌ |
final boolean | postDelayed | Runnable r, long delayMillis | delayMillis๋งํผ ์ง์ฐ ํ Message Queue์ Runnable r์ ์ ๋ฌ |
final boolean | sendMessageDelayed | Message msg, long delayMillis | delayMillis๋งํผ ์ง์ฐ ํ Message Queue์ Message msg๋ฅผ ์ ๋ฌ |
์ธ๋ถ, ํน์ ์๊ธฐ ์ค๋ ๋๋ก๋ถํฐ ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ด๋ค ์์ผ๋ก ์ฒ๋ฆฌํ ์ง๋ handleMessage() ๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ์ ํฉ๋๋ค. sendMessage()๋ post()๋ก ํน์ Handler์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ์ ์๊ณ , ์ฌ๊ท์ ์ธ ํธ์ถ๋ ๊ฐ๋ฅํ๋ฏ๋ก ๋๋ ์ด๋ฅผ ์ด์ฉํ ํ์ด๋จธ๋ ์ค์ผ์ค๋ง ์ญํ ๋ ํ ์ ์์ด ํธ๋ฆฌํฉ๋๋ค.
Looper์ Message Queue
Looper๋ ๋ฌดํํ ๋ฃจํ๋ฅผ ๋๋ฉฐ ์์ ์ด ์ํ ์ค๋ ๋์ Message Queue์ ๋ค์ด์จ Message๋ Runnable ๊ฐ์ฒด๋ฅผ ์ฐจ๋ก๋ก ๊บผ๋ด์ ์ด๋ฅผ ์ฒ๋ฆฌํ Handler์ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ฉ์ธ ์ค๋ ๋๋ Looper๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋ผ ์์ง๋ง, ์๋ก ์์ฑํ ์ค๋ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก Looper๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ณ , ๋จ์ง run ๋ฉ์๋๋ง ์คํํ ํ ์ข ๋ฃํ๊ธฐ ๋๋ฌธ์ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ ์ค๋ ๋์์ ๋ฉ์์ง๋ฅผ ์ ๋ฌ๋ฐ์ผ๋ ค๋ฉด prepare() ๋ฉ์๋๋ฅผ ํตํด Looper๋ฅผ ์์ฑํ๊ณ , loop() ๋ฉ์๋๋ฅผ ํตํด Looper๊ฐ ๋ฌดํํ ๋ฃจํ๋ฅผ ๋๋ฉฐ Message Queue์ ์์ธ Message๋ Runnable ๊ฐ์ฒด๋ฅผ ๊บผ๋ด Handler์ ์ ๋ฌํ๋๋ก ํฉ๋๋ค. ์ด๋ ๊ฒ ํ์ฑํ๋ Looper๋ quit()์ด๋ quitSafely() ๋ฉ์๋๋ก ์ค๋จํ ์ ์์ต๋๋ค. quit() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด Looper๋ ์ฆ์ ์ข ๋ฃ๋๊ณ , quitSafely() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ํ์ฌ Message Queue์ ์์ธ ๋ฉ์์ง๋ค์ ์ฒ๋ฆฌํ ํ ์ข ๋ฃ๋ฉ๋๋ค.
Message์ Runnable
Message๋ ์ค๋ ๋ ๊ฐ ํต์ ํ ๋ด์ฉ์ ๋ด๋ ๊ฐ์ฒด์ด์ Queue์ ๋ค์ด๊ฐ ์ผ๊ฐ์ ๋จ์๋ก Handler๋ฅผ ํตํด ๋ณด๋ผ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Message๊ฐ ํ์ํ ๋ ์ Message ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ์ฑ๋ฅ ์ด์๊ฐ ์๊ธธ ์ ์์ผ๋ฏ๋ก ์๋๋ก์ด๋๊ฐ ์์คํ ์ ๋ง๋ค์ด ๋ Message Pool์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค. obtain() ๋ฉ์๋๋ ๋น Message ๊ฐ์ฒด๋ฅผ, obtain(Handler h, int what …)์ ๋ชฉ์ handler์ ๋ค๋ฅธ ์ธ์๋ค์ ๋ด์ Message ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํฉ๋๋ค. Runnable์ ์ค๋ช ํ๋ ค๋ฉด ์ค๋ ๋๋ฅผ ๋ง๋๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ๋ถํฐ ๋ง์๋๋ ค์ผ ํฉ๋๋ค. ์ ์ค๋ ๋๋ Thread() ์์ฑ์๋ก ๋ง๋ค์ด์ ๋ด๋ถ์ ์ผ๋ก run()์ ๊ตฌํํ๋์ง, Thread(Runnable runnable) ์์ฑ์๋ก ๋ง๋ค์ด์ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ ๋ฌํ๋์ง ๋ ์ค ํ๋์ ๋ฐฉ๋ฒ์ผ๋ก ์์ฑํ๊ฒ ๋ฉ๋๋ค. ํ์์์ ์ฌ์ฉํ๋ ๊ฒ์ด Runnable๋ก ์ค๋ ๋์ run() ๋ฉ์๋๋ฅผ ๋ถ๋ฆฌํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ Runnable ์ธํฐํ์ด์ค๋ run() ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์์๋ฐ์ ํด๋์ค๋ run()์ฝ๋๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํฉ๋๋ค. ์์ ์ธ๊ธํ๋๋ก Message๊ฐ int๋ Object๊ฐ์ด ์ค๋ ๋ ๊ฐ ํต์ ํ ๋ด์ฉ์ ๋ด๋๋ค๋ฉด, Runnable์ ์คํํ run() ๋ฉ์๋์ ๊ทธ ๋ด๋ถ์์ ์คํ๋ ์ฝ๋๋ฅผ ๋ด๋๋ค๋ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
HandlerThread
Looper์์ ์ธ๊ธํ๋ฏ์ด ์๋๋ก์ด๋์ ์ค๋ ๋๋ Java์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋๋ก์ด๋์์ ๋์ ํ Looper๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๊ฐ์ง์ง ์๋๋ค๋ ๋ถํธํจ์ด ์์ต๋๋ค. ์ด ๊ฐ์ ๋ถํธํจ์ ๊ฐ์ ํ๊ธฐ ์ํด ์์ฑํ ๋ Looper๋ฅผ ์๋์ผ๋ก ๋ณด์ ํ ํด๋์ค๋ฅผ ์ ๊ณตํ๋๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก HandlerThread์ ๋๋ค. HandlerThread๋ ์ผ๋ฐ์ ์ธ ์ค๋ ๋๋ฅผ ํ์ฅํ ํด๋์ค๋ก ๋ด๋ถ์ ๋ฐ๋ณตํด์ ๋ฃจํ๋ฅผ ๋๋ Looper๋ฅผ ๊ฐ์ง๋๋ค. ์๋์ผ๋ก Looper ๋ด๋ถ์ Message Queue๋ ์์ฑ๋๋ฏ๋ก ์ด๋ฅผ ํตํด ์ค๋ ๋๋ก Message๋ Runnable์ ์ ๋ฌ๋ฐ์ ์ ์์ต๋๋ค.
AsyncTask
AsyncTask๋ ์ค๋ ๋๋ ๋ฉ์์ง ๋ฃจํ ๋ฑ์ ์๋ ์๋ฆฌ๋ฅผ ๋ชฐ๋ผ๋ ํ๋์ ํด๋์ค์์ UI์์ ๊ณผ backgrond ์์ ์ ์ฝ๊ฒ ํ ์ ์๋๋ก ์๋๋ก์ด๋์์ ์ ๊ณตํ๋ ํด๋์ค์ ๋๋ค. ์บก์ํ๊ฐ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ฆ๋๋๋ ์ฅ์ ์ด ์์ผ๋ฉฐ, ํ์คํฌ ์ค์ผ์ฅด์ ๊ด๋ฆฌํ ์ ์๋ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ณ , ํ์ํ ๋ ์ฝ๊ฒ UI ๊ฐฑ์ ๋ ๊ฐ๋ฅํ๋ฉฐ ์์ ์ทจ์๋ ์ฝ์ต๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ์คํธ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ฐ์ดํฐ ๋ค์ด๋ก๋ ๋ฑ UI์ ๊ด๋ จ๋ ๋ ๋ฆฝ๋ ์์ ์ ์คํํ ๊ฒฝ์ฐ AsyncTask๋ก ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
๊ทธ๋ฆผ: AsyncTask์ ๊ตฌ์กฐ
๊ทธ๋ฌ๋ AsyncTask๋ฅผ ์ฌ์ฉํด์ ์ค์ผ์ค๋ง ํ ์ ์๋ ์์ ์์ ์ ํ์ด ์๊ณ , ๋ช ์ด ์ ๋์ ์งง์ ์์ ์์๋ง ์ด์์ ์ผ๋ก ๋์ํ๋ค๋ ํ๊ณ๊ฐ ์์ต๋๋ค. ๋ํ, ์๋๋ก์ด๋์ ๋ฒ์ ๋ณ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋์์ด ๋ค๋ฅด๋ฏ๋ก ํ๋์ฝค ์ดํ ๋ฒ์ ์์ ๋ฉํฐ ์ค๋ ๋๋ก ๋ณ๋ ฌ์ ์ธ ๋์์ ์ํ๋ค๋ฉด AsyncTask๋ฅผ ์คํํ ๋ AsyncTask.THREAD_POOL_EXECUTOR ์ค์ผ์ค๋ฌ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ํํธ ์์ ์ดํด๋ณธ Handler์ Looper๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๋ ์๋ฆฌ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ฉฐ ๊ตฌํ์ ์ง์ ํด์ผ ํ๊ณ ์ฝ๋๊ฐ ๋ณต์กํด์ ธ์ ๊ฐ๋ ์ฑ์ ์ ํดํ๋ค๋ ๋จ์ ์ด ์์ง๋ง ๊ทธ๋งํผ ๊ฐ๋ฐ ๋ฒ์๊ฐ ์์ ๋กญ์ต๋๋ค. ๋ํ UI ์ค๋ ๋์์๋ง ์์ ํ์ง ์์๋ ๋๋ฏ๋ก ๋ณด๋ค ๋ง์ ์์จ์ฑ์ ๊ฐ์ง๊ณ ์ฝ๋๋ฅผ ์ ์ดํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด Handler๋ HandlerThread ์ฌ์ฉ์ ๊ณ ๋ คํด ๋ณด์ธ์.
๋์๋ ์ฌ์ดํธ
์ ๋ชฉ์ ๋งํฌ๋ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ์ฌ์ดํธ๋ฅผ ์ ๋ ํ๋ฉด ํด๋น ํด๋์ค๋ ์ธํฐํ์ด์ค์ ๊ฐ๋ ์ ์ ๋ฐํ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉ๋ฒ์ ์ตํ ์ ์์ต๋๋ค. ๊ทธ ๋ฐ์๋ ๋ค์ ์ฌ์ดํธ๋ค์ด ํฌ๊ฒ ๋์๋์ต๋๋ค.
- Android Developers-Thread
- Android Developers-Message
- Android Developers-Runnable
- Android Developers-HandlerThread
- Android Developers-AsyncTask
- Painless threading
- Activity์ ๋ํด์ ์์ฑ์ ์ํผ๋๋ก์ด๋
์ถ์ฒ : https://academy.realm.io/kr/posts/android-thread-looper-handler/