android Timer TimerTask 启动与停止及常见无法停止问题解决
来源:互联网 发布:python ide推荐 编辑:程序博客网 时间:2024/06/15 07:59
在编程中经常会用到定时器Timer
private void setTime(){ time_right.setVisibility(View.VISIBLE); timer = new Timer(true); timerTask = new MyTimerTask(); musicCurrentDuration = 0; timer.schedule(timerTask,0,1000); } private long musicCurrentDuration = 0; private MyTimerTask timerTask; private class MyTimerTask extends TimerTask{ @Override public void run() {// int duration = mVideoView.getDuration(); musicCurrentDuration += 1000; if (musicCurrentDuration >= musicDuration){ cancel(); if (timer!= null){ timer.purge(); timer.cancel(); timer = null; } runOnUiThread(new Runnable() { @Override public void run() { camera_start_pause.performClick(); } }); return; }// int currentPosition = mVideoView.getCurrentPosition(); try { final String s = TimeUtils.longToString(musicCurrentDuration, "mm:ss"); final String ss = TimeUtils.longToString(musicDuration,"mm:ss"); runOnUiThread(new Runnable() { @Override public void run() { time_right.setText(s+"/"+ss); } }); } catch (ParseException e) { e.printStackTrace(); } } };
这是一个使用场景,我们打开定时器,执行timertask,注意,这个timertask每次都要重新new一个,否则会报错。timer不需要。当定时器的timertask执行后,我们分两种情况,一个是run方法内部的判断生效,这时我们执行自己需要的操作,并且注意关闭timertask 和timer,而且注意顺序先关闭timertask 再关闭timer,
如果我们提前手动处理了,计时器中的操作还未到时间,也需要关闭计时器,和上面一样顺序。
最好在onDestroy中也执行关闭操作
@Override protected void onDestroy() { super.onDestroy(); if (timerTask != null){ timerTask.cancel(); timerTask = null; } if (timer != null){ timer.cancel(); timer.purge(); timer = null; } }
还有一种timertask的写法
private void setTime(){ if (timer==null) { time.setVisibility(View.VISIBLE); timer = new Timer(true); timer.schedule(timerTask, 0, 500); } } private TimerTask timerTask=new TimerTask() { @Override public void run() { if (mVideoView == null){ return; } int duration = mVideoView.getDuration(); int currentPosition = mVideoView.getCurrentPosition(); try { final String s = TimeUtils.longToString(duration, "mm:ss"); final String ss = TimeUtils.longToString(currentPosition,"mm:ss"); runOnUiThread(new Runnable() { @Override public void run() { time.setText(ss+"/"+s); } }); } catch (ParseException e) { e.printStackTrace(); } } };
这种方式只在timertask用一次,不会重复使用的情况下可以。否则报错。关闭计时器方式和上方一样,可在你想关闭的地方关闭。
阅读全文
0 0
- android Timer TimerTask 启动与停止及常见无法停止问题解决
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- timer启动停止 thread启动停止
- Java: Timer启用后无法停止?如何停止Timer
- Java: Timer启用后无法停止?如何停止Timer
- Xampp中apche停止后无法启动的问题解决
- java编程式控制quartz Scheduler 启动和停止,无法停止的问题解决
- NSTimer启动与停止
- mysql 启动与停止
- mongoDB 启动与停止
- mysql停止与启动
- C# Timer 无法停止问题的解决
- LeetCode636. Exclusive Time of Functions
- Linux中如何安装.rpm、.tar、.tar.…
- STL总结
- SecureCRT rz 上传文件失败问题
- google的zxing实现二维码生成和解…
- android Timer TimerTask 启动与停止及常见无法停止问题解决
- TCP与UDP区别
- Java中多线程join方法介绍与用法
- Java中Runnable和Thread的区别
- 使用redis存储Java对象
- java中Executor、ExecutorService…
- Java线程池
- 梯度下降
- [Java]ExecutorService的正确关闭…