본문 바로가기

프로그래밍/안드로이드

[안드로이드] 스레드(Thread)

안녕하세요 ! 초보개발자 입니다. 

이 블로그는 개인 공부 정리용 블로그 입니다. 

혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.

그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.

그럼 시작하도록 하겠습니다.



스레드(Thread)


안드로이드에서는 표준자바의 스레드를 그대로 사용 할 수 있습니다.  그렇기 때문에 스레드라는 말을 많이 들었을 것입니다. 스레드는 동시 수행이 가능한 작업 단위이며 현재 수행되는 작업 이외의 별도의 기능을 동시에 처리하고자 할 때 스레드가 사용됩니다.  


다음 코드는 별도의 스레드를 하나 생성하여 1초마다 value 값을 증가 시키고 있습니다. 그리고 버튼을 누를 때마다 value의 값을 확인 할 수 있습니다.


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.example.donghyun.thread;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
    int value;
    Button button =null;
    TextView textView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button =(Button)findViewById(R.id.button);
        textView =(TextView)findViewById(R.id.aa);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText("value 값 :"+value);
            }
        });
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    value++;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
 
 
            }
        });
        t.start();
    }
 
 
}
 
cs


이처럼 백그라운드에서 별도의 작업을 수행하고자 할 때 스레드를 사용합니다. 그런데 위의 코드는 버튼을 클릭 하였을 경우에만 텍스트 뷰에 값을 설정하도록 구현 되어 있습니다. 그렇다면 직접 스레드 t의 run() 에 textview의 값을 설정하는 코드를 넣어 실시간으로 변화하는 것을 볼 수는 없을까요 ? 안드로이드는 메인스레드에서만 UI의 변경이 가능합니다. 그렇기 때문에 Thread t 에 UI를 변경하는 코드를 넣으면 에러가 발생합니다. 그렇다면 어떤 방법을 써야 할까요 ? 위의 문제를 해결하려면 핸들러라는 것을 이용 하여야 합니다. 


다음 포스팅에서 핸들러에 대해 알아보고 위의 문제를 해결해 보도록 하겠습니다.