package rune.and.test;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
import android.widget.Toast;
public class Thread_testActivity extends Activity {
int value =0, value2=0;
TextView mText, mText2;
// BackThread2 thread2 = new BackThread2();
// private MyHandler mHandler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mText=(TextView)findViewById(R.id.tv);
mText2=(TextView)findViewById(R.id.tv2);
// mHandler=new MyHandler();
BackThread thread = new BackThread();
// thread.setDaemon(true);
thread.run();
// thread2.run();
}
class BackThread extends Thread{
public void run()
{
Toast.makeText(Thread_testActivity.this,"쓰레드시작", Toast.LENGTH_LONG).show();
while(true){
if(value==5)
break;
value++;
mHandler.sendEmptyMessageDelayed(0,10);
try{Thread.sleep(1000);
}
catch (InterruptedException e)
{;}
}
Toast.makeText(Thread_testActivity.this,"쓰레드정지", Toast.LENGTH_LONG).show();
}
}
Handler mHandler= new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0)
{
Toast.makeText(Thread_testActivity.this,"111", Toast.LENGTH_SHORT).show();
mText.setText("1.Value"+value);
}
}
};
}
대략 이런구조료
시작을 하면 텍스트뷰1에 1초간격으로 총 5초간 숫자를 +1씩 하는 내용인데...
시작후 5초간 멍때리다가 한번에 5가 표기되고 끝납니다.
생각대로라면 1초간격으로 핸들에게 메세지를 보내서 +1씩 해야하는데...
일단 쓰레드가 하나라도 멀쩡히 굴러가야 두세개를 동시에 돌려보곤 할텐데...
어디가 문제인지 알 수 있을까요?
그리고 혹시 멀티쓰레드의 소스 예제가 있는곳 어디 없을까요?
class BackThread extends Thread{
public void run()
{
//if(value==5)
// this.stop();
value++;
mHandler.sendEmptyMessage(0);
try{Thread.sleep(1000);
}
catch (InterruptedException e)
{;}
}
//Toast.makeText(Thread_testActivity.this,"쓰레드정지", Toast.LENGTH_LONG).show();
}
Handler mHandler= new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0)
{
Toast.makeText(Thread_testActivity.this,"1---"+value, Toast.LENGTH_SHORT).show();
mText.setText("1.Value"+value);
}
}
};
일단 이런식으로 바꿔봤는데 1회 다시 돌지 않는거같습니다.
class BackThread extends Thread{
int cnt = 0 ;
public void run() {
if(cnt == 5){
mHandler.removeCallbacks(run);
}
mHandler.sendEmptyMessage(cnt);
cnt++;
mHandler.postDelayed(run,1000);
}
}
Handler mHandler= new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0)
{
mText.setText("1.Value"+value);
}
}
};
걍 답을 갈쳐드릴께요 ㅠㅠ
그렇게 메서드좀 알고 쓰라고해도 안쓰셩




쓰레드안에 루프문이있어서 그렇습니다 루프문대신 if문 넣고
핸들러도 정의하셧다면 핸들러객체.postDelayed(runable, delayMillis) 메서드써서 돌려보세요