이 글은 PC 버전 TISTORY에 최적화 되어있습니다.
서론
Thread 의 필요성
Thread 사용법
new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub firstWork(getApplicationContext()); } }).start();
- Thread 클래스를 상속 받는 하위 스레드 클래스 생성
- 하위 스레드 내에 run( )을 오버라이드 한다. run( )은 Thread가 실행되면 수행되는 곳이다.
- Thread 객체를 생성해주고 start( ) 메소드로 Tread의 run( ) 메소드를 실행시켜준다.
public class ThreadTest extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ExampleThread thread = new ExampleThread(); thread.start(); } private class ExampleThread extends Thread { private static final String TAG = "ExampleThread"; public ExampleThread() { // 초기화 작업 } public void run() { // 스레드에게 수행시킬 동작들 구현 } } }
Thread 사용 예제1 - Timer
private class ExampleThread extends Thread { private static final String TAG = "ExampleThread"; public ExampleThread() { // 초기화 작업 } public void run() { int second = 0; while (true) { second++; try { // 스레드에게 수행시킬 동작들 구현 Thread.sleep(1000); // 1초간 Thread를 잠재운다 } catch (InterruptedException e) { e.printStackTrace(); ; } Log.i("경과된 시간 : ", Integer.toString(second)); } } }
간단한 타이머 구현이니 이해가 어렵다면 차근차근 읽어보길 권장한다.
Thread 사용 예제2 - Join( ) 사용
public class MainActivity extends AppCompatActivity { ExampleThread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("메인 스레드 시작"," "); for(int i = 0; i <=3 ; i++) { thread = new ExampleThread(i); thread.start(); } try{ thread.join(); }catch (InterruptedException e) { } Log.i("메인 스레드 종료"," "); } private class ExampleThread extends Thread { private int threadNum = 0; public ExampleThread(int threadNum) { // 초기화 작업 this.threadNum = threadNum; } public void run() { Log.i("시작된 스레드", Integer.toString(threadNum)); try { // 스레드에게 수행시킬 동작들 구현 Thread.sleep(1000); // 1초간 Thread를 잠재운다 } catch (InterruptedException e) { e.printStackTrace(); } Log.i("종료된 스레드", Integer.toString(threadNum)); } } }
위의 예제는 3개의 스레드를 돌리고 난 후 무언가를 실행하는 Join( ) 예제이다. Join( ) 메소드를 사용하면 실행한 스레드의 종료를 알 수 있어 다양한 곳에 사용할 수 있다.
아래는 실행 결과이다.
Join( )을 사용하지 않으면 보시다시피 MainThread의 작업 따로 Thread에서의 작업 따로 진행이 된다.
Joiin( )을 사용하면 보시다시피 Main에서 Thread를 기다리게 된다.
지금까지 안드로이드에서 쓰이는 Thread에 대해서 간단히 알아보았다. 하지만 이 지식만으로는 UI의 변경이라는 큰 벽을 해결할 수 없기 때문에 다음 포스팅에서 Handler와 Looper에 대해서 알아보도록 하겠다.
'Frontend > Android' 카테고리의 다른 글
[안드로이드] AsyncTask란? (개념 및 사용법) (3) | 2016.07.07 |
---|---|
[안드로이드] runOnUiThread란? (개념과 사용법) (5) | 2016.07.07 |
[안드로이드] Thread, Handler, Looper를 통한 백그라운드 처리 (10) | 2016.07.06 |
[안드로이드] ANR의 의미와 예방 (2) | 2016.07.05 |
[안드로이드] 리스트뷰 성능최적화 (Convertview와 ViewHolder Pattern의 이해) (2) | 2016.07.05 |
[안드로이드] 리스트뷰의 개념 및 사용법 (1) | 2016.07.05 |
이 글은 PC 버전 TISTORY에 최적화 되어있습니다.
서론
Thread 의 필요성
Thread 사용법
new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub firstWork(getApplicationContext()); } }).start();
- Thread 클래스를 상속 받는 하위 스레드 클래스 생성
- 하위 스레드 내에 run( )을 오버라이드 한다. run( )은 Thread가 실행되면 수행되는 곳이다.
- Thread 객체를 생성해주고 start( ) 메소드로 Tread의 run( ) 메소드를 실행시켜준다.
public class ThreadTest extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ExampleThread thread = new ExampleThread(); thread.start(); } private class ExampleThread extends Thread { private static final String TAG = "ExampleThread"; public ExampleThread() { // 초기화 작업 } public void run() { // 스레드에게 수행시킬 동작들 구현 } } }
Thread 사용 예제1 - Timer
private class ExampleThread extends Thread { private static final String TAG = "ExampleThread"; public ExampleThread() { // 초기화 작업 } public void run() { int second = 0; while (true) { second++; try { // 스레드에게 수행시킬 동작들 구현 Thread.sleep(1000); // 1초간 Thread를 잠재운다 } catch (InterruptedException e) { e.printStackTrace(); ; } Log.i("경과된 시간 : ", Integer.toString(second)); } } }
간단한 타이머 구현이니 이해가 어렵다면 차근차근 읽어보길 권장한다.
Thread 사용 예제2 - Join( ) 사용
public class MainActivity extends AppCompatActivity { ExampleThread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("메인 스레드 시작"," "); for(int i = 0; i <=3 ; i++) { thread = new ExampleThread(i); thread.start(); } try{ thread.join(); }catch (InterruptedException e) { } Log.i("메인 스레드 종료"," "); } private class ExampleThread extends Thread { private int threadNum = 0; public ExampleThread(int threadNum) { // 초기화 작업 this.threadNum = threadNum; } public void run() { Log.i("시작된 스레드", Integer.toString(threadNum)); try { // 스레드에게 수행시킬 동작들 구현 Thread.sleep(1000); // 1초간 Thread를 잠재운다 } catch (InterruptedException e) { e.printStackTrace(); } Log.i("종료된 스레드", Integer.toString(threadNum)); } } }
위의 예제는 3개의 스레드를 돌리고 난 후 무언가를 실행하는 Join( ) 예제이다. Join( ) 메소드를 사용하면 실행한 스레드의 종료를 알 수 있어 다양한 곳에 사용할 수 있다.
아래는 실행 결과이다.
Join( )을 사용하지 않으면 보시다시피 MainThread의 작업 따로 Thread에서의 작업 따로 진행이 된다.
Joiin( )을 사용하면 보시다시피 Main에서 Thread를 기다리게 된다.
지금까지 안드로이드에서 쓰이는 Thread에 대해서 간단히 알아보았다. 하지만 이 지식만으로는 UI의 변경이라는 큰 벽을 해결할 수 없기 때문에 다음 포스팅에서 Handler와 Looper에 대해서 알아보도록 하겠다.
'Frontend > Android' 카테고리의 다른 글
[안드로이드] AsyncTask란? (개념 및 사용법) (3) | 2016.07.07 |
---|---|
[안드로이드] runOnUiThread란? (개념과 사용법) (5) | 2016.07.07 |
[안드로이드] Thread, Handler, Looper를 통한 백그라운드 처리 (10) | 2016.07.06 |
[안드로이드] ANR의 의미와 예방 (2) | 2016.07.05 |
[안드로이드] 리스트뷰 성능최적화 (Convertview와 ViewHolder Pattern의 이해) (2) | 2016.07.05 |
[안드로이드] 리스트뷰의 개념 및 사용법 (1) | 2016.07.05 |