import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final int TIME_OUT = 0 ;
private static final int SUCCESS = 1 ;
// 超时的时限为5秒
private static final int TIME_LIMIT = 5000 ;
ProgressDialog proDialog;
Timer timer;
Thread thread;
Button btn1, btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
// 测试未超时的线程,为btn1绑定事件
btn1.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
proDialog = ProgressDialog.show(MainActivity. this , "提示" ,
"线程运行中" );
// 匿名内部线程
thread = new Thread() {
@Override
public void run() {
while ( true ) {
try {
//线程休眠时间,超时
sleep( 10000 );
} catch (InterruptedException e) {
break ;
}
}
}
};
thread.start();
// 设定定时器
timer = new Timer();
timer.schedule( new TimerTask() {
@Override
public void run() {
sendTimeOutMsg();
}
}, TIME_LIMIT);
}
});
// 测试超时的线程,为btn2绑定事件
btn2.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
proDialog = ProgressDialog.show(MainActivity. this , "提示" ,
"线程运行中" );
// 匿名内部线程
thread = new Thread() {
public void run() {
try {
// 线程休眠时间,未超时
Thread.sleep( 3000 );
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msgSuc = new Message();
msgSuc.what = SUCCESS;
myHandler.sendMessage(msgSuc);
}
};
thread.start();
// 设定定时器
timer = new Timer();
timer.schedule( new TimerTask() {
@Override
public void run() {
sendTimeOutMsg();
}
}, TIME_LIMIT);
}
});
}
// 接收消息的Handler
final Handler myHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case TIME_OUT:
//打断线程
thread.interrupt();
proDialog.dismiss();
Toast.makeText(MainActivity. this , "线程超时" , Toast.LENGTH_SHORT)
.show();
break ;
case SUCCESS:
//取消定时器
timer.cancel();
proDialog.dismiss();
Toast.makeText(MainActivity. this , "线程运行完成" , Toast.LENGTH_SHORT)
.show();
break ;
default :
break ;
}
};
};
//向handler发送超时信息
private void sendTimeOutMsg() {
Message timeOutMsg = new Message();
timeOutMsg.what = TIME_OUT;
myHandler.sendMessage(timeOutMsg);
}
}
|