2010년 5월 24일 월요일

[android]Thread 예제 입니다.

이번에는 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;
    }
}

댓글 없음:

댓글 쓰기