ํ ์ฌ๋์ด ๋์์ ์ฌ๋ฌ ์์
์ ํ ์ ์๋ค
=๋ฉํฐ ํ์คํน
ํ๋ก์ธ์ค vs ์ค๋ ๋
ํ๋ก์ธ์ค: ๋
๋ฆฝ์ ๋จ์, ์ฐ์์ ์ผ๋ก ์คํ๋๊ณ ์๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ
๋์์ ์ฌ๋ฌ ์์
> ๋ฉํฐ ํ๋ก์ธ์ค
์ค๋ ๋: ํ๋์ ํ๋ก๊ทธ๋จ ๋ด์์ ๋ ์ด์์ ์์
์ ๋์์ ์งํํ๋ ํ๋ก์ธ์ค๋ณด๋ค ์์ ๋จ์
์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ์์ฑ๋์ด ํ๋์ ์ปด์ด ์ฌ๋ฌ ์์
ํ๋์ ํ๋ก์ธ์ค์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ๋์
1.์นด์ดํธ ์๋ ? ์ฑ
2.๊ฒ์
โ ์๊ฐ์ฒดํฌ
โก ๋๋์ฅ ์์ง์ด๊ธฐ
์์ 0 ์ด ๋๋ ์๋ 1์ฉ ์นด์ดํธ
(์ฌ์ง)
๋ฒํผ์ ๋๋ฅด๋ฉด ์นด์ดํธ๊ฐ ์๋์ผ๋ก ์ธ์ด์ง๊ฒ
1.๊ฐ์ฒด ์ ์ธ/์ด๊ธฐํ
2.thread ์์ - run๋ฉ์๋ - ๋ก์ง ์ ์
3.thread ๊ฐ์ฒด ์์ฑ
4.handler ๋ง๋ค๊ธฐ - handleMessage์ ์ธ
4.msg.arg1์ ๊ฐ ๋ฃ๊ธฐ - sendMessage(msg)๋ก ์ ๋ฌ
โ ๊ฐ์ฒด ์์ฑ, ์ด๊ธฐํ
TextView tvNumber;
Button btnStart;
tvNumber = findViewById(R.id.tvNumber);
btnStart = findViewById(R.id.btnStart);
โก extend Thread
class TimerThread extends Thread{ //์ค๋ ๋ ์์
//run์ ์ค๋ฒ๋ผ์ด๋
public void run(){
//์คํํ ๋ก์ง ์ ์
//๋ฒํผ ๋๋ ์ ๋ ์๋ ์นด์ดํธ ๊ธฐ๋ฅ
//
for(int i =0;i<10;i++){
Log.d("TimerThread","์นด์ดํธ"+(i+1));
}
}
}
โข
//3 Thread ๊ฐ์ฒด ์์ฑ
TimerThread thread = new TimerThread();
//์คํ์ํค๋ ๋ฉ์๋ start
thread.start();
โฃ
//4. 1์ด
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
โค
//5.id๋ณ์ ๋ฃ์ด์ฃผ๋ฉด ์ฌ๊ธฐ ๊ฐ์ด ๋ค์ด๊ฐ๋ ์ํ
tvNumber.setText(String.valueOf(i+1));
mainThread์์๋ง ui์์
ํ ์ ์๋ค.
subThread์์ ui์
๋ฐ์ดํธ๋ฅผ ํ๋ ค๋ฉด Handler๋ฅผ ์ด์ฉ
subThread์์ ์์ ์ ํ๊ณ ํ๋ฉด์ ์ ๋ฐ์ดํธ ์ํค๊ณ ์ถ์๋ฐ ๊ทธ ์ผ์ main๋ง ๊ฐ๋ฅ
์ด๊ฑธ ํ ์ ์๊ฒ ํ๋ ค๋ฉด? main์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๊ฐ์ ๋๊ฒจ์ค ๋ฐ์์์ผ์ผํ๋ค!
app์คํ>mainT์๋์คํ,
main์๋ messageQueue๋ ๋ฉ์ธ์ง๋ผ๋ ๋ด์ฉ์ ๋ฐ์์ ๋, ์คํ์์ผ์ฃผ๋ ๊ฒ
sub์์ message> handler> main์ queue ์ | > handler > subT
//8.ํธ๋ค๋ฌ ์ค์ ?
TimerHandler handler = new TimerHandler();
//7.Handler์ ๊ฐ์ ์ ๋ฌํด์ค์ผํ๋ค -> Message๊ฐ์ฒด๋ฅผ ์ ๋ฌ
Message msg = new Message();
msg.arg1 = i+1;
//message๊ฐ์ฒด ์ ์ก
handler.sendMessage(msg);
//๊ฐ์ ์ด๋ค ๋ณ์์ ๋ด์์คฌ๋๋ ๊ธฐ์ต!
//ํธ๋ค๋ฌ ๋ง๋ค๊ธฐ
class TimerHandler extends Handler{
@Override
public void handleMessage(@NonNull Message msg) {
//ํ ๋ง๋ค๊ธฐ ๋!
//sub Thread์์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ UI์์ ์
๋ฐ์ดํธ ํ ๋
//HandlerMessage()์์ ์ ์ํ๋ฉด ๋๋ค.
int count = msg.arg1;
tvNumber.setText(String.valueOf(count)); //์ ์๋๊น ๋ฐ๋ก ๋ฃ์ผ๋ฉด x > String.valueof()
}
}
๋ฒํผ ํด๋ฆญ์, ์ซ์ ์ฌ๋ผ๊ฐ๊ฒ?
โ onclick ๋ฉ์๋
//์ค๋ ๋ ๊ฐ์ฒด ์คํ
TimerHandler handler2 = new TimerHandler();
//๋ฒํผ ๋นํ์ฑํ
btnStart.setEnabled(false);