※ 멀티 스레드란?
- 여러가지 일을 동시에 처리 할 수 있도록 해주는 것
- 실제로는 여러가지일을 동시에 하는 것이 아니라 여러가지 일을 왔다갔다 하면서 순서대로 해결하는 것이다.
- 스레드에서는 UI 스레드에서만 UI를 컨트롤 할 수 있다. 그렇기 때문에 핸들러를 만들어서 핸들러를 통해 쓰레드에서 연산을 한 결과를 UI스레드로 보내여 UI를 컨트롤 한다.
※ 스레드를 만드는 법
- 스레드를 상속받아 만드는 법 (스레드를 상속받아 런 메소드를 재정의 해준다)
private void startNum(){
mainNum ++;
NewThread nt = new NewThread();
//해당 시스템이 죽으면 같이 스레도도 정지 시키기 위한 함수
nt.setDaemon(true);
//run()메소드 호출
nt.start();
mainThread.setText("mainNum : " + mainNum);
secondThread.setText("secondNUM : "+ secondNum);
}
class NewThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
secondNum++;
try{
//0.5초마다 잠깐 멈춘다. 즉 0.5초 간격으로 쉬었다가 계속 ++을한다.
//쉬는동안 다른 작업을 한다.
Thread.sleep(500);
}catch(Exception e){
}
}
}
}
- Runnable 인터페이스를 구현한 클래스를 만들어서 스레드 객체에 넣어주어 구현.
private void startNum(){
mainNum ++;
SecondRunnable sr = new SecondRunnable();
Thread nt = new Thread(sr);
nt.setDaemon(true);
nt.start();
mainThread.setText("mainNum : " + mainNum);
secondThread.setText("secondNUM : "+ secondNum);
}
class SecondRunnable implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
secondNum++;
try{
//0.5초마다 잠깐 멈춘다. 즉 0.5초 간격으로 쉬었다가 계속 ++을한다.
//쉬는동안 다른 작업을 한다.
Thread.sleep(500);
}catch(Exception e){
}
}
}
}
※ 핸들러란?
- 스레드 간의 통신매체
사진출처 : 서울위즈 앱 창업자를 위한 안드로이드 실무 동영상
class SecondRunnable implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
secondNum++;
try{
//0.5초마다 잠깐 멈춘다. 즉 0.5초 간격으로 쉬었다가 계속 +를한다.
//쉬는동안 다른 작업을 한다.
Thread.sleep(500);
}catch(Exception e){
}
Message msg = Message.obtain();
msg.what = 0;
msg.arg1 = 0;
msg.arg2 = 0;
msg.obj = null;
mainHandler.sendMessage(msg);
}
}
}
Handler mainHandler = new Handler(){
public void handleMessage(Message msg){
if(msg.what == 0 ){
secondThread.setText("secondNUM : "+ secondNum);
}
}
};
※ 메세지 사용법
- 위에서 소스의 사용법을 알 수 있다.
- obtain => 메세지 객체를 재활용한다. 왜냐하면 메세지를 보낼때 마다 새 메세지 객체를 만들면 반복문에서는 비효율 적일 수 있기 때문에 적절하게 사용해야됨
- sendMessage에 메세지 객체를 넣어 보내면 핸들러에서 handleMessage 에서 받는다.
※ runOnUiThread 메서드
사진출처 : 서울위즈 앱 창업자를 위한 안드로이드 실무 동영상
class NewThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
secondNum++;
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
secondThread.setText("secondNUM : "+ secondNum);
}
});
}
}
}
'플밍 is 뭔들 > 안드로이드_인강' 카테고리의 다른 글
14-1. 브로드캐스트 리시버 (0) | 2016.11.28 |
---|---|
13-2. 스레드 (0) | 2016.11.28 |
12-2. 알람 (0) | 2016.11.28 |
12-1. 노티(Notification)바 (0) | 2016.11.27 |
11-3. 팝업대화상자 (0) | 2016.11.27 |