Android定时器Timer的停止和重启实现代码
发布时间 - 2026-01-11 02:35:08 点击率:次本文介绍了Android定时器Timer的停止和重启实现代码,分享给大家,具体如下:

7月份做了一个项目,利用自定义控件呈现一幅动画,当时使用定时器来控制时间,但是当停止开启时总是出现问题。一直在寻找合理的方法解决这个问题,一直没有找到,最近终于找到了合理的方法来解决这个问题。
大家如何查询有关资料,一定知道timer,timertask取消的方式是采用Timer.cancel()和mTimerTask.cancel(),可是大家发现这种发式取消后,再次开始timer时,会报错
FATAL EXCEPTION: main
Process: com.example.zhongzhi.gate_control_scheme, PID: 2472
java.lang.IllegalStateException: Timer already cancelled.
at java.util.Timer.sched(Timer.java:397)
at java.util.Timer.schedule(Timer.java:248)
at com.example.zhongzhi.gate_control_scheme.MainActivity.onClick(MainActivity.java:401)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
这个问题的解决采用cancle(),取消timer后,还需要清空timer。合理的代码应该是这样的:
mTimer.cancel(); mTimer = null; mTimerTask.cancel(); mTimerTask = null;
关键的问题解决完了,下面给出我的案例代码Mainactivity.Java:
public class MainActivity extends AppCompatActivity {
private static String TAG = "TimerDemo";
private TextView mTextView = null;
private Button mButton_start = null;
private Button mButton_pause = null;
private Timer mTimer = null;
private TimerTask mTimerTask = null;
private Handler mHandler = null;
private static int count = 0;
private boolean isPause = false;
private boolean isStop = true;
private static int delay = 1000; //1s
private static int period = 1000; //1s
private static final int UPDATE_TEXTVIEW = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView)findViewById(R.id.mytextview);
mButton_start = (Button)findViewById(R.id.mybutton_start);
mButton_pause = (Button)findViewById(R.id.mybutton_pause);
mButton_start.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if (isStop) {
Log.i(TAG, "Start");
} else {
Log.i(TAG, "Stop");
}
isStop = !isStop;
if (!isStop) {
startTimer();
}else {
stopTimer();
}
if (isStop) {
mButton_start.setText(R.string.start);
} else {
mButton_start.setText(R.string.stop);
}
}
});
mButton_pause.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if (isPause) {
Log.i(TAG, "Resume");
} else {
Log.i(TAG, "Pause");
}
isPause = !isPause;
if (isPause) {
mButton_pause.setText(R.string.resume);
} else {
mButton_pause.setText(R.string.pause);
}
}
});
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_TEXTVIEW:
updateTextView();
break;
default:
break;
}
}
};
}
private void updateTextView(){
mTextView.setText(String.valueOf(count));
}
private void startTimer(){
if (mTimer == null) {
mTimer = new Timer();
}
if (mTimerTask == null) {
mTimerTask = new TimerTask() {
@Override
public void run() {
Log.i(TAG, "count: "+String.valueOf(count));
sendMessage(UPDATE_TEXTVIEW);
do {
try {
Log.i(TAG, "sleep(1000)...");
Thread.sleep(1000);
} catch (InterruptedException e) {
}
} while (isPause);
count ++;
}
};
}
if(mTimer != null && mTimerTask != null )
mTimer.schedule(mTimerTask, delay, period);
}
private void stopTimer(){
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (mTimerTask != null) {
mTimerTask.cancel();
mTimerTask = null;
}
count = 0;
}
public void sendMessage(int id){
if (mHandler != null) {
Message message = Message.obtain(mHandler, id);
mHandler.sendMessage(message);
}
}
}
xml部分代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/mytextview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/number" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
<Button
android:id="@+id/mybutton_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start" />
<Button
android:id="@+id/mybutton_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pause" />
</LinearLayout>
</LinearLayout>
string部分代码:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TimerDemo</string> <string name="number">0</string> <string name="start">start</string> <string name="stop">stop</string> <string name="pause">pause</string> <string name="resume">resume</string> </resources>
上面就是我的源代码,如果大家有什么问题可以留言进行探讨。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android定时器停止
# Android定时器重启
# Android使用Handler实现定时器与倒计时器功能
# Android定时器和倒计时实现淘宝秒杀功能
# 详解Android实现定时器的几种方法
# Android 定时器实现图片的变换
# Android实现定时器的五种方法实例详解
# Android 实现定时器的四种方式总结及实现实例
# Android中使用定时器的三种方法
# Android定时器实现的几种方式整理及removeCallbacks失效问题解决
# 基于Android中实现定时器的3种解决方法
# Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式
# 解决这个问题
# 有什么
# 是这样
# 这个问题
# 给大家
# 自定义
# 还需要
# 一幅
# 一直没有
# 报错
# 重启
# 方法来
# 源代码
# 有关资料
# 大家多多
# 清空
# 找到了
# invoke
# Method
# reflect
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用模型观察者?(Observer代码示例)
Android仿QQ列表左滑删除操作
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
网易LOFTER官网链接 老福特网页版登录地址
网站建设整体流程解析,建站其实很容易!
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel如何配置和使用缓存?(Redis代码示例)
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
独立制作一个网站多少钱,建立网站需要花多少钱?
jQuery validate插件功能与用法详解
深圳网站制作平台,深圳市做网站好的公司有哪些?
Mybatis 中的insertOrUpdate操作
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
大同网页,大同瑞慈医院官网?
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel如何实现文件上传和存储?(本地与S3配置)
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
Laravel如何处理异常和错误?(Handler示例)
北京网站制作的公司有哪些,北京白云观官方网站?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
海南网站制作公司有哪些,海口网是哪家的?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何快速查询网站的真实建站时间?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
昵图网官网入口 昵图网素材平台官方入口
Bootstrap CSS布局之列表
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
活动邀请函制作网站有哪些,活动邀请函文案?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
公司网站制作价格怎么算,公司办个官网需要多少钱?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
Swift开发中switch语句值绑定模式
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Python进程池调度策略_任务分发说明【指导】

