안드로이드/이론

안드로이드 스레드(Thread) 사용하기

원원 2017. 8. 25. 17:33




스레드란 프로그램내에서 실행되는 실행 단위를 말하는데 일반적으로 스레드는 1개만 존재합니다.(메인)

그래서 스레드를 하나더 만들면 흐름이 2개가 되서 다양한 일을 처리할 수 있습니다.


일반적으로 스레드를 생성하지않는 경우 메인스레드 한개만 존재해서, 메인스레드가 UI를 처리하게 됩니다. 

그림B에서는 메인스레드 외에, 스레드1, 스레드2가 있습니다. 스레드에서는 UI를 처리하지 못하므로, 핸들러라는 객체를 사용하여 처리하게 됩니다.

ex)스레드에서 텍스트뷰의 글씨를 바꾸면 에러뜸




스레드를 만드는법은 간단한데요. 먼저 스레드 클래스를 만들거나 상속한다음 run메소드를 구현해주면 됩니다.



 1.스레드 클래스 만들기(익명 이너클래스)

1
2
3
4
5
6
       Thread th = new Thread(new Runnable() {
            @Override
            public void run() {
             //구현 내용
            }
        });
cs





2.상속으로 스레드 만들기

1
2
3
4
5
class userThread extends Thread{
    public void run(){
        //구현내용
    }
}
cs

스레드를 사용할 클래스를 만들어줫으니 사용하려면 클래스를 만들어야합니다.

1
Thread th = new userThread();
cs



3.Runnable 인터페이스 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MainActivity extends AppCompatActivity implements Runnable {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Thread th = new Thread(MainActivity.this);
        th.start();
    }
 
    @Override
    public void run() {
 
    }
}
cs


스레드를 만들었으니 스레드를 시작시키면 됩니다.

스레드를 시작시키는 법은

1
th.start();
cs
(위의 코드기준)
이런식으로 만든클래스에서 start함수를 사용하면 됩니다.



사용해보기



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MainActivity extends AppCompatActivity  {
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Thread th = new Thread(new Runnable() {
            @Override
            public void run() {
                    int Num = 1;
                    while (true) {
                        Log.i("Thread""" + Num);
                        Num++;
 
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
            }
        });
 
        th.start();
    }
}
cs

위의 코드는 1.스레드 클래스 만들기방법으로 스레드를 만든 것입니다.
Log창에 1초마다 한번식 메시지가 출력되는것을 볼 수 있습니다.




3.Runnable 인터페이스 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class MainActivity extends AppCompatActivity implements Runnable {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Thread th = new Thread(MainActivity.this);
        th.start();
    }
 
    @Override
    public void run() {
        int Num = 1;
        while (true) {
            Log.i("Thread""" + Num);
            Num++;
 
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
cs

실행결과는 위와 같습니다.