안규 공부방

Android > Thread 사용하기

등록일 : 2017-07-06 17:21 조회수 : 93,637

안드로이드는 백그라운드에서 실행되어야 하는 기능을 서비스라는 애플리케이션 구성요소로 정의합니다.

하지만 별도의 프로세스가 아닌 동일한 프로세스 내에서 동시에 다른 작업을 해야 한다면 멀티 스레드 방식을 사용할 수 있습니다.

현재 수행되는 작업 이외의 기능를 동시에 처리하고자 할 때 새로운 스레드를 만들어 처리할 수 있습니다.

안드로이드에서 UI처리를 위해 사용되는 기본 스레드는 '메인스레드'라고 부릅니다.

이 메인스레드에서 이미 UI를 접근하고 있으므로 새로 생성한 다른 스레드에서는 핸들러(Handler) 객체를 이용해서 메시지를 전달

함으로써 메인스레드에서 처리하도록 만들 수 있습니다.

1. Thread 사용하기

안드로이드에서는 표준 자바의 스레드를 그대로 사용할 수 있으므로 가장 단순한 방법을 알아보도록 하겠습니다.

스레드는 new 연산자를 이용하여 객체를 생성한 후 start()메소드를 호출하면 시작할 수 있습니다.

Thread 클래스에 정의된 생성자는 크게 파라미터가 없는 경우와 Runnable 객체를 파라미터로 가지는 두가지로 구분할 수 있습니다.
 
	int value = 0;
	
	Thread thread1 = new BackgroundThread();
	thread1.start();


	class BackgroundThread extends Thread {
		public void run() {
			while(running) {
				try {
					Thread.sleep(1000);
					value++;
				} catch(InterruptedException ex) {
					Log.e("SampleJavaThread","Exception in thread.",ex);
				}

			}
		}
	}

BackgroundThread 클래스 내에서 1초마다 value 값을 1씩 더해주는 스레드 예제 입니다.
 
	Thread background1 = new Thread(new Runnable() {
		public void run() 
		{
			try  {    				 
				//여기에 작업할 내용을 넣는다.
				Thread.sleep(1000);       
				value++;
			} catch (Throwable t) 
			{
				// 오류가 발생하면 백그라운드 스레드를 그대로 종료.
				Log.e("SampleJavaThread","Exception in thread.",ex);
			}
		}
	});

	background1.start();


이 두번째 방법은 클래스 내부에서 스레드를 사용하는 방법 입니다. 똑같은 기능을 수행하게 됩니다.

1. Runnable 사용하기

Runnable  객체에 메시지를 전송할수 있는 방법이 있는데. 이때 사용하는 게 핸들러 객체 입니다.

Handler 의 post() 메서드를 이용해서 Runnable 객체를 실행 시킬 수 있습니다.
 
	handler = new Handler();
	runnable1 = new PorgressRunnable();


	Thread thread1 = new Thread(new Runnable() {
		public void run() {
			//여기에 작업할 내용을 넣는다.
			...
			handler.post(runnable1);	//runnable1 객체(PorgressRunnable 클래스) 에 객체를 전달한다.
			...
		}
	});
	
	thread1.start();


	public class ProgressRunnable implements Runnable {
		public void run() {
			//여기에 작업할 내용을 넣는다.
		}
	}
	


ProgressRunnable 클래스를 실행하기 위해서 handler.post(runnable1); 명령을 이용해 호출하는 함수 예제 입니다.

 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.