안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
스레드(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를 변경하는 코드를 넣으면 에러가 발생합니다. 그렇다면 어떤 방법을 써야 할까요 ? 위의 문제를 해결하려면 핸들러라는 것을 이용 하여야 합니다.
다음 포스팅에서 핸들러에 대해 알아보고 위의 문제를 해결해 보도록 하겠습니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드] 데이터베이스(sqlite) 사용법 (25) | 2017.05.29 |
---|---|
[안드로이드] 핸들러(Handler) (0) | 2017.05.25 |
[안드로이드] 프로그래스바(ProgressBar) 사용하기 (2) | 2017.05.18 |
[안드로이드] 리스트 뷰(ListView) 이용하기 (0) | 2017.05.17 |
[안드로이드] 스피너(Spinner) 이용하기 (1) | 2017.05.16 |