Android递增计时器:如何实现点击屏幕暂停与续播的切换功能
搞定Android计时器的暂停与续播功能
我来帮你解决这个问题!你已经完成了计时器启动和暂停标识切换的基础工作,只需要补充几个关键变量和逻辑,就能实现点击切换暂停/续播的需求。
核心思路
要实现暂停后从原位置续播,关键是记录暂停时已经累计的时间,续播时从这个时间点继续累加,同时用Handler来控制计时的循环启动与停止。
具体实现步骤
1. 补充必要的成员变量
除了你已有的mVisible,还需要这几个变量来管理计时状态:
private long mElapsedTime = 0; // 记录累计的毫秒数 private Handler mHandler = new Handler(Looper.getMainLooper()); private boolean mIsRunning = false; // 标记计时器是否正在运行 private Runnable mTimerRunnable; // 计时的Runnable任务
2. 初始化计时任务
在Activity的onCreate或者onResume方法里,初始化计时的Runnable逻辑:
mTimerRunnable = new Runnable() { @Override public void run() { mElapsedTime += 1000; // 这里以每秒递增为例,你可以根据需求调整间隔 // 更新UI:比如把mElapsedTime转换成时分秒显示在TextView上 updateTimerDisplay(mElapsedTime); if (mIsRunning) { mHandler.postDelayed(this, 1000); // 继续循环计时 } } };
3. 启动计时器(页面打开时触发)
在页面启动时(比如onResume)启动计时器:
@Override protected void onResume() { super.onResume(); startTimer(); } private void startTimer() { if (!mIsRunning) { mIsRunning = true; mHandler.post(mTimerRunnable); } }
4. 处理屏幕点击的暂停/续播逻辑
给Activity的根布局设置点击事件(或者给整个View设置),切换状态:
// 在onCreate里设置点击监听 getWindow().getDecorView().setOnClickListener(v -> { mVisible = !mVisible; // 更新暂停标识的显示(你已经实现了这部分,比如显示/隐藏暂停图标) togglePauseIndicator(mVisible); if (mVisible) { // 点击后显示暂停标识,停止计时器 pauseTimer(); } else { // 再次点击隐藏暂停标识,继续计时 resumeTimer(); } }); // 暂停计时器 private void pauseTimer() { if (mIsRunning) { mIsRunning = false; mHandler.removeCallbacks(mTimerRunnable); // 移除未执行的任务,停止循环 } } // 续播计时器 private void resumeTimer() { if (!mIsRunning) { mIsRunning = true; mHandler.post(mTimerRunnable); // 从当前累计时间继续计时 } }
5. 处理生命周期,避免内存泄漏
在Activity进入后台时停止计时器,防止后台运行浪费资源:
@Override protected void onPause() { super.onPause(); pauseTimer(); } @Override protected void onDestroy() { super.onDestroy(); mHandler.removeCallbacksAndMessages(null); // 清空Handler所有任务,避免内存泄漏 }
关键说明
mElapsedTime是核心:它记录了从启动到现在的累计时间,暂停时不会重置,续播时继续累加,这样就能实现从暂停点继续计时。- Handler的任务管理:暂停时一定要调用
removeCallbacks移除Runnable,否则计时器会继续偷偷运行;续播时重新post任务即可。 - 如果你的计时精度要求更高,可以把1000毫秒的间隔调小(比如100毫秒),但注意UI更新不要太频繁影响性能。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

