티스토리 뷰

개인적으로 이해한 간단한 정리

UI를 건드리지 않는 시간 걸리는 작업 
Thread 이용
new Thered {
    run() {
        백그라운드에서 할일;
    }
}

시간 걸리는 작업 상태를 받아서 무엇인가 보여주고(UI로 나타내고) 싶을때
Handler 이용
Handler myHandler = new Handler()
{
	public void handleMessage( Message msg )
	{
               msg 전달받아 조건에 따라 작업;
        }
}

new Thered {
    run() {
        백그라운드에서 할일 ...;
        myHandler.sendMessage(전달할 msg);
    }
}


Thread 는 아래와 같이 코딩
new Thread(new Runnable()
{
	public void run()
	{
		progress01.setProgress( 0 );
		progress01.setMax( 100 );
				
		for ( int i = 0; i <= 100; ++i )
		{
			progress01.setProgress( i );
			
			SystemClock.sleep(100);
		}
		
		//Toast.makeText(MyThread.this, "Thread Finished", Toast.LENGTH_SHORT).show();
	}
}).start();
Thread 코딩의 다른 표현 예
// 새로운 스래드와 내부에서 실행될 Logic을 Runnable로 객체화 함.
Runnable increaseProgress = new Runnable() {
			
	// Runnable interface의 유일한 abstract method 구현.
	// run() 메소드는 본 Runnable객체가 공급된 Thread가 시작할때 자동으로 호출.
	public void run() {
		for(nProgress = 0; nProgress<=100; nProgress+=10) {
			try {
				bar.setProgress(nProgress);
			}
			catch(Exception e) {
				Log.w("h-exception", e.toString());							
			}
			SystemClock.sleep(600);
		}
	}
};
		
// 위에 선언한 Runnable객체에 구현된 logic을 실행할 새로운 Thread 객체 생성
Thread worker = new Thread(increaseProgress);
		
// 새로운 스레드 시작됨 -> Runnable interface의 run()메소드가 
// 새로운 스레드에서 실행됨.
worker.start();	


Handler는 아래와 같이 코딩
Handler myHandler = new Handler()
{
	public void handleMessage( Message msg )
	{
		if ( msg.what == -1 )
		{
			progress01.setProgress( 0 );
			progress01.setMax( 100 );
		}
		else if ( msg.what == -100 )
		{
			Log.i( "INFO", "Finish Thread!!!" );
			Toast.makeText(MyThread.this, "Finish Thread!!!", Toast.LENGTH_SHORT).show();
		}
		else
		{
			progress01.setProgress( msg.what );
		}
	}
};

public void onClick( View v )
{
	if ( v == btn01 )
	{
		new Thread(new Runnable()
		{
			public void run()
			{
				Message msg = myHandler.obtainMessage();
				msg.what = -1;
				myHandler.sendMessage( msg );
				
				for ( int i = 0; i <= 100; ++i )
				{
					msg = myHandler.obtainMessage();
					msg.what = i;
					myHandler.sendMessage( msg );
					
					SystemClock.sleep(100);
				}
				
				msg = myHandler.obtainMessage();
				msg.what = -100;
				myHandler.sendMessage( msg );
			}
		}
		).start(); 
	}
}

'모바일 > Android' 카테고리의 다른 글

android sdk manager 업데이트 시도중 failed to install  (0) 2011.12.20
안드로이드 JSON 파싱  (0) 2011.11.27
Android에서 XML을 처리  (0) 2011.11.11
[앱-게임] 데스티니아  (0) 2011.11.07
에픽하츠 설치 요구사항  (0) 2011.11.01
댓글