TimerandTimerTask计时器
利用Timer和TimerTask做一个计时器
创新互联建站始终坚持【策划先行,效果至上】的经营理念,通过多达10多年累计超上千家客户的网站建设总结了一套系统有效的全网整合营销推广解决方案,现已广泛运用于各行各业的客户,其中包括:成都水电改造等企业,备受客户称扬。
包括开始、停止、暂停、恢复四个功能
需要注意的问题主要有两点:
1、Timer和TimerTask在调用cancel()取消后
不能再执行 schedule语句,否则提示出错
2、只能在UI主线程中更新控件/组件。
在其他线程中,更新控件/组件,会提示出错
package com.example.testtimer2; import java.util.Timer; import java.util.TimerTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.annotation.SuppressLint; import android.app.Activity; @SuppressLint("HandlerLeak") public class MainActivity extends Activity implements OnClickListener{ private Button btnStart; private Button btnPause; private boolean isStop = true; private boolean isPause = false; private int count = 0; private int delay_time = 1000; private int UPDATE_UI = 0x11; private Timer mTimer; private TimerTask mTimerTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnStart = ((Button) findViewById(R.id.button1)); btnPause = ((Button) findViewById(R.id.button2)); btnStart.setOnClickListener(this); btnPause.setOnClickListener(this); } private void startTimer(){ if(mTimer == null){ mTimer = new Timer(); } if(mTimerTask == null){ mTimerTask = new TimerTask(){ public void run() { do{ try{ Thread.sleep(delay_time); mHandler.sendEmptyMessage(UPDATE_UI); if(!isPause){ count++; } if(isStop){ count = 0; } }catch(Exception e){ e.printStackTrace(); } }while(!isStop); } }; } if(mTimer != null && mTimerTask != null){ /** * Timer.schedule(TimerTask task, long delay, long period) * 三个参数分别为:1、要执行的任务 2、延迟多少时间开始执行 3、每隔多少时间执行一次 * */ mTimer.schedule(mTimerTask, delay_time); } } private void stopTimer(){ if(mTimer != null){ mTimer.cancel(); mTimer = null; } if(mTimerTask != null){ mTimerTask.cancel(); mTimerTask = null; } count = 0; } private Handler mHandler = new Handler(){ public void handleMessage(Message msg){ switch(msg.what){ case 0x11: initUI(); break; } } }; private void initUI(){ ((TextView) findViewById(R.id.textView1)).setText(count + ""); } @Override public void onClick(View arg0) { if(arg0.equals(btnStart)){ if(isStop){ startTimer(); }else{ stopTimer(); } isStop = !isStop; if(isStop){ btnStart.setText(R.string.start_time); }else{ btnStart.setText(R.string.stop_time); } } if(arg0.equals(btnPause)){ if(isPause){ }else{ } isPause = !isPause; if(isPause){ btnPause.setText(R.string.resume_time); }else{ btnPause.setText(R.string.pause_time); } } } }
//layout布局
//string.xml
TestTimer2 Settings Hello world! start stop resume pause time
新闻名称:TimerandTimerTask计时器
当前路径:http://hbruida.cn/article/peoghd.html