irpas技术客

Android 简单 计时器 实现_one-NF

网络投稿 7479

1.Timer + TimerTask 实现

private MyTimerTask mMyTimerTask; private Timer mTimer; private long count; private class MyTimerTask extends TimerTask { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { count++; TextView tv = findViewById(R.id.tv); tv.setText("" + count); } }); } } //开始计时 private void startTimerTask() { stopTimerTask();//防止 多次调用 Timer.schedule 报错 if (mTimer == null) { mTimer = new Timer(true); } if (mMyTimerTask == null) { mMyTimerTask = new MyTimerTask(); } mTimer.schedule(mMyTimerTask, 1000, 1000);//延时 1000 毫秒 并以 1000 毫秒 周期 循环执行 } //结束计时 public void stopTimerTask() { if (mTimer != null) { mTimer.cancel(); mTimer = null; } if (mMyTimerTask != null) { mMyTimerTask.cancel(); mMyTimerTask = null; } }

2. Handler 实现 (毫秒值在100 以上时,计时相对准确)

public class MainActivity extends AppCompatActivity { private MyHandler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler=new MyHandler(Looper.getMainLooper()); } } private final int TIME_START = 1001; private final int TIME_STOP = 1002; private final int TIME_RUN = 1003; private long count; private class MyHandler extends Handler { public MyHandler(@NonNull Looper looper) { super(looper); } @Override public void handleMessage(@NonNull Message msg) { switch (msg.what) { case TIME_START: postDelayed(mRunable, 1000);//延时 1000 毫秒执行 break; case TIME_STOP: removeCallbacks(mRunable); break; case TIME_RUN: count++; TextView tv = findViewById(R.id.tv_2); tv.setText("" + count); break; } } }; private Runnable mRunable = new Runnable() { @Override public void run() { mHandler.sendEmptyMessage(TIME_RUN); mHandler.postDelayed(this, 1000);//延时 1000 毫秒执行(循环执行) } }; //开始计时 private void startHandlerTimer(){ mHandler.sendEmptyMessage(TIME_START); } //停止计时 private void stopHandlerTimer(){ mHandler.sendEmptyMessage(TIME_STOP); }

3.Thread + Handler 实现

public class MainActivity extends AppCompatActivity { private CMHandler mCMHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mCMHandler=new CMHandler(); } } private final int TIMER_RUN = 100; private boolean canRun=true; private long count; private class CMHandler extends Handler { public CMHandler(@NonNull Looper looper) { super(looper); } @Override public void handleMessage(@NonNull Message msg) { switch (msg.what) { case TIMER_RUN: count++; TextView tv = findViewById(R.id.tv_3); tv.setText("" + count); break; } } } //开始计时 private void startTimer(){ canRun=true; new Thread(new Runnable() { @Override public void run() { while (canRun){//循环 try { Thread.sleep(1000);//睡眠 1000 毫秒执行 } catch (InterruptedException e) { e.printStackTrace(); } mCMHandler.sendEmptyMessage(TIMER_RUN); } } }).start(); } //停止计时 private void stopTimer(){ canRun=false; }

?

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Android #简单 #计时器 #实现 #1Timer #TimerTask