본문 바로가기

플밍 is 뭔들/안드로이드_인강

13-1. 스레드

※ 멀티 스레드란?
 - 여러가지 일을 동시에 처리 할 수 있도록 해주는 것  
 - 실제로는 여러가지일을 동시에 하는 것이 아니라 여러가지 일을 왔다갔다 하면서 순서대로 해결하는 것이다. 
 - 스레드에서는  UI 스레드에서만 UI를 컨트롤 할 수 있다. 그렇기 때문에 핸들러를 만들어서 핸들러를 통해 쓰레드에서 연산을 한 결과를 UI스레드로 보내여 UI를 컨트롤 한다.

※ 스레드를 만드는 법
  1. 스레드를 상속받아 만드는 법 (스레드를 상속받아 런 메소드를 재정의 해준다)
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){
                                  
                           }
                     }
                     
              }
       }

  1. 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