使用Handler控制进度条,完成开始、暂停、继续、停止操作

来源:互联网 发布:python 查看硬盘分区表 编辑:程序博客网 时间:2024/05/21 10:41
使用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(){@Overridepublic 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() {@Overridepublic void run() {//Message ms = mHandler.obtainMessage();//此句也可以Message ms=new Message();try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}    i+=20;ms.what = i; // 其值为int型,传递int值Log.d("哈哈",ms.what+"");HandlerActivity.this.mHandler.sendMessage(ms);//mHandler.sendMessage(ms);//也可以}};class MHandler extends Handler {// 必须重写此方法@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//int ms = msg.what; // 接收数据并更新UIHandlerActivity.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);   //启动线程}}}

0 0