使用Handler的removeCallbacks(Runnable)可以停止线程的运行,并且使用Handler的removeMessage(0)方法,如果要开始或继续运行,则使用handler的post(Runnable)方法,如果暂停,则只使用removeCallbacks()方法即可。
public class HandlerActivity extends Activity {
Button button = null; // 未指明访问权限,默认为default.权限由大到小:
Button button2;
Button button3;
Button button4;
ProgressBar progressbar=null;
MHandler mHandler;
int i;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handler);
button = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
button2.setOnClickListener(myClick);
button3.setOnClickListener(myClick);
button4.setOnClickListener(myClick);
progressbar=(ProgressBar) this.findViewById(R.id.progressbar);
mHandler=new MHandler();
//以下5句不需单击即可运行Thread,是通过Handler的POST方法启动的
/*
Message ms=new Message();
ms.what=120;
mHandler.sendMessage(ms);
Message msg=mHandler.obtainMessage();//获取数据
Log.d("obtain",msg.what+"");
*/
button.setOnClickListener(new
OnClickListener(){
@Override
public void onClick(View v) {
i=0;
button.setText("开始");
new Thread(ra).start(); //启动
//mHandler.post(ra);
}
});
}
OnClickListener myClick=new OnClickListener(){
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button2:// 暂停
mHandler.removeCallbacks(ra);;
break;
case R.id.button3: //继续
mHandler.post(ra);//继续运行
break;
case R.id.button4: //停止
mHandler.removeMessages(0);//清除原数据
mHandler.removeCallbacks(ra);
//Thread.currentThread().interrupt();
break;
}
}
};
Runnable ra = new Runnable() {
@Override
public void run() {
//Message ms = mHandler.obtainMessage();//此句也可以
Message ms=new Message();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i+=20;
ms.what = i; // 其值为int型,传递int值
Log.d("哈哈",ms.what+"");
HandlerActivity.this.mHandler.sendMessage(ms);
//mHandler.sendMessage(ms);//也可以
}
};
class MHandler extends Handler {
// 必须重写此方法
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//int ms = msg.what; // 接收数据并更新UI
HandlerActivity.this.button.append(msg.what + ",");
HandlerActivity.this.progressbar.setProgress(msg.what);
if(msg.what>=100){
//如果当i的值为100时将当前线程从handler中移除
mHandler.removeCallbacks(ra);
return;
}
mHandler.post(ra); //启动线程
}
}
}