Handler.sendMessage delay 시간이 정확한지 체크 및 스레드 종료 타이밍 테스트 입니다.


어떤 방법으로 했을때가 가장 빠르게 종료 될지 의문이네요.. 

밑에서 결과를 보시면 알겠지만  종료이후 일을 조금 더 하고 끝나는군요..


게다가 마지막에 t2 에서 핸들러에게 날린것은 타이밍상 맞지 않은데 마지막으로

버퍼 플러쉬 해주듯이 호출 합니다. 이부분도 의문이네요..--;;


혹시 비슷한 문제를 해결하신분 있으신가요? 공유해봅시다~!!



/Users/Lowmans/Programming/Workspace/Android/Test/src/lowmans/test/TestActivity.java







package lowmans.test;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;


public class TestActivity extends Activity {


	private boolean sendEnable = true;
	private Thread1 t1;
	private Thread2 t2;


	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);


		t1 = new Thread1();
		t1.start();
		t2 = new Thread2();
		t2.start();
	}


	class Thread1 extends Thread {
		private boolean loopEnable = true;
		private int cnt = 0;


		public void run() {
			while (loopEnable) {
				try {
					sleep(100);
				} catch (InterruptedException e) {
				}
				if (++cnt > 10) {
					cnt = 0;
				}
				Log.i("#@#", "----- Loop : " + cnt + "------");
			}
		};
		
		public void setCnt(){
			cnt = 0;
		}


		public void release() {
			loopEnable = false;
		}
	};


	class Thread2 extends Thread {
		private boolean loopEnable = true;


		public void run() {
			while (loopEnable) {
				if (sendEnable) {
					h.sendEmptyMessageDelayed(0, 1000);
					sendEnable = false;
				}
			}
		};


		public void release() {
			loopEnable = false;
		}
	};


	Handler h = new Handler() {
		public void handleMessage(android.os.Message msg) {
			sendEnable = true;
			t1.setCnt();
			Log.i("#@#", "handler ###");
		};
	};


	public void onBackPressed() {
		Log.i("#@#", "onBackPressed()");
		t1.release();
		t2.release();
		finish();
	};
}




  -------- 결과 --------


05-24 17:24:05.839: I/#@#(8202): ----- Loop : 1------

05-24 17:24:05.941: I/#@#(8202): ----- Loop : 2------

05-24 17:24:06.039: I/#@#(8202): ----- Loop : 3------

05-24 17:24:06.140: I/#@#(8202): ----- Loop : 4------

05-24 17:24:06.238: I/#@#(8202): ----- Loop : 5------

05-24 17:24:06.339: I/#@#(8202): ----- Loop : 6------

05-24 17:24:06.441: I/#@#(8202): ----- Loop : 7------

05-24 17:24:06.539: I/#@#(8202): ----- Loop : 8------

05-24 17:24:06.640: I/#@#(8202): ----- Loop : 9------

05-24 17:24:06.742: I/#@#(8202): ----- Loop : 10------

05-24 17:24:06.746: I/#@#(8202): handler ###

05-24 17:24:06.839: I/#@#(8202): ----- Loop : 1------

05-24 17:24:06.941: I/#@#(8202): ----- Loop : 2------

05-24 17:24:07.039: I/#@#(8202): ----- Loop : 3------

05-24 17:24:07.140: I/#@#(8202): ----- Loop : 4------

05-24 17:24:07.242: I/#@#(8202): ----- Loop : 5------

05-24 17:24:07.339: I/#@#(8202): ----- Loop : 6------

05-24 17:24:07.441: I/#@#(8202): ----- Loop : 7------

05-24 17:24:07.542: I/#@#(8202): ----- Loop : 8------

05-24 17:24:07.640: I/#@#(8202): ----- Loop : 9------

05-24 17:24:07.742: I/#@#(8202): ----- Loop : 10------

05-24 17:24:07.746: I/#@#(8202): handler ###

05-24 17:24:07.839: I/#@#(8202): ----- Loop : 1------

05-24 17:24:07.941: I/#@#(8202): ----- Loop : 2------

05-24 17:24:08.042: I/#@#(8202): ----- Loop : 3------

05-24 17:24:08.140: I/#@#(8202): ----- Loop : 4------

05-24 17:24:08.242: I/#@#(8202): ----- Loop : 5------

05-24 17:24:08.343: I/#@#(8202): ----- Loop : 6------

05-24 17:24:08.441: I/#@#(8202): ----- Loop : 7------

05-24 17:24:08.542: I/#@#(8202): ----- Loop : 8------

05-24 17:24:08.640: I/#@#(8202): ----- Loop : 9------

05-24 17:24:08.742: I/#@#(8202): ----- Loop : 10------

05-24 17:24:08.746: I/#@#(8202): handler ###

05-24 17:24:08.843: I/#@#(8202): ----- Loop : 1------

05-24 17:24:08.941: I/#@#(8202): ----- Loop : 2------

05-24 17:24:08.996: I/#@#(8202): onBackPressed()

05-24 17:24:09.042: I/#@#(8202): ----- Loop : 3------

05-24 17:24:09.750: I/#@#(8202): handler ###