이번에는 Thread 예제다..
#. main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<ProgressBar
android:id = "@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
#. HandlerExample.java
package com.android.handlerExample;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ProgressBar;
/**
* Message 객체 주요 메소드
* a. sendMessage() : 넘겨받은 메시지를 즉시 메시지큐의 맨 뒤에 쌓는다.
* b. sendMessageAtFrontOfQueue() : 메시지큐의 맨 뒤가 아닌 맨앞에 쌓는다. 고로 다음 차례에
가장 먼저 처리됨.
* c. sendMessageAtTime() : 특정 시간이 되면 메세지 큐에 쌓는다.
* d. sendMessageDelayed() : 특정 시간이 지난 이후에 메시지큐에 쌓는다.
*/
public class HandlerExample extends Activity
{
ProgressBar bar;
Handler handler = new Handler()
{
public void handleMessage(android.os.Message msg)
{
bar.setMax(100);
bar.incrementProgressBy(5); // 5씩 증가하고 추가적인 작업은 하지 않는다.
};
};
boolean isRunning = false;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bar = (ProgressBar) findViewById(R.id.progress);
Thread background = new Thread(new Runnable()
{
public void run()
{
try
{
for ( int i = 0; i < 20 && isRunning; i++)
{
Thread.sleep(1000); // 1초간 대기후
handler.sendMessage(handler.obtainMessage()); // handler에 message 던져준다. 이작업 20번 반복!
}
}
catch (Throwable t)
{
// 오류가 발생하면 백그라운드 스레드를 그대로 종료.
}
}
});
isRunning = true;
background.start();
}
@Override
protected void onStop()
{
super.onStop();
isRunning = false;
}
}