Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) 간단한 스레드 사용법과 숫자값 올리기

안드로이드 개발
반응형

안드로이드(Android) 간단한 스레드 사용법과 숫자값 올리기

 

개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2

 

안드로이드에서 스레드 사용법에 대해서 간단한

예제로 알아봅니다. Runnable 인터페이스를 상속받아

스레드 객체를 만들고 스레드가 도는 동안

Handler 객체에 메시지를 보내 작업을 시킬 것입니다.

화면을 보시면 1초당 값이 하나씩 계속해서

증가합니다.

 

 

소스를 설명하자면 Activity 시작 함수 onStart()

스레드 객체에 만들고 run() 함수를 구현하였습니다.

스레드가 동작하게 되면 run() 내부 코드가 무한

으로 실행되겠죠.

run 함수 내부에서는 Handler 객체를 통해

1초동안 멈춘뒤 메시지를 보내게 됩니다.

 

@Override
protected void onStart() {
	super.onStart();
	Thread myThread = new Thread(new Runnable() {
		public void run() {
			while (true) {
				try {
					handler.sendMessage(handler.obtainMessage());
					Thread.sleep(1000);
				} catch (Throwable t) {
				}
			}
		}
	});

	myThread.start();
}

 

Run 스레드 함수에서 sendMessage 하게 되면

handleMessage 함수가 실행되며 updateThread()

수행합니다.

 

Handler handler = new Handler() {
	@Override
	public void handleMessage(Message msg) {
		updateThread();
	}
};

 

updateThread() 함수에는 텍스트에 숫자를 증가하는

기능이 들어가게 됩니다. Activity 가 종료되지 않는

이상 스레드는 무한으로 돌것이므로 계속해서

증가하겠죠.

 

private void updateThread() {
	i++;
	myi.setText(String.valueOf(i));
}

 

간단 스레드를 구현한 메인 레이아웃 xml 입니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="안드로이드 스레드 예제" />

    <TextView
        android:id="@+id/i"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

아래는 메인 Activity 전체 소스가 되겠습니다.

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class SampleActivity10 extends Activity {
	private int i = 0;
	private TextView myi;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sample_activity10);

		myi = (TextView) findViewById(R.id.i);
	}

	Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			updateThread();
		}
	};

	@Override
	protected void onStart() {
		super.onStart();
		Thread myThread = new Thread(new Runnable() {
			public void run() {
				while (true) {
					try {
						handler.sendMessage(handler.obtainMessage());
						Thread.sleep(1000);
					} catch (Throwable t) {
					}
				}
			}
		});

		myThread.start();
	}

	private void updateThread() {
		i++;
		myi.setText(String.valueOf(i));
	}
}

 

반응형
Posted by 녹두장군1
,