Android Studio Java实现1分钟倒计时结束后跳转Activity并重置计时器
解决方案
核心实现思路
- 将
CountDownTimer定义为类成员变量,方便全局控制计时器的启动、取消、重置操作,避免匿名内部类持有Activity引用导致的内存泄漏 - 在
onFinish回调中实现Activity跳转逻辑,可根据需求选择是否销毁当前倒计时页面,保证下次进入时倒计时可以重新启动 - 在Activity的生命周期回调中添加计时器销毁逻辑,避免页面退出后计时器仍在运行占用资源
- 计时器启动逻辑放入
onResume回调,保证每次页面回到前台展示时都会重新触发倒计时
修改后完整代码
public class BeginAfter extends AppCompatActivity { TextView textView; // 定义计时器成员变量 private CountDownTimer countDownTimer; // 倒计时总时长1分钟 private final long DURATION = TimeUnit.MINUTES.toMillis(1); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_begin_after); textView = findViewById(R.id.timer); } @Override protected void onResume() { super.onResume(); // 每次页面回到前台时启动倒计时 startCountDown(); } @Override protected void onPause() { super.onPause(); // 页面退到后台时销毁计时器,避免内存泄漏 if (countDownTimer != null) { countDownTimer.cancel(); countDownTimer = null; } } private void startCountDown() { countDownTimer = new CountDownTimer(DURATION, 1000) { @Override public void onTick(long l) { String sDuration = String.format( Locale.ENGLISH, "%02d", TimeUnit.MILLISECONDS.toSeconds(l) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(l)) ); textView.setText(sDuration); } @Override public void onFinish() { // 先更新UI显示0 textView.setText("00"); // 跳转目标Activity,这里把TargetActivity替换为你自己的目标页面类名 Intent intent = new Intent(BeginAfter.this, TargetActivity.class); startActivity(intent); // 如果需要跳转后销毁当前倒计时页面,添加下面这行,下次进入会重新走onCreate流程 finish(); } }.start(); } }
可选调整说明
如果不需要倒计时在页面退到后台时重置,而是要保留剩余时长下次进入继续倒计时,可以新增成员变量存储剩余毫秒数,onPause时记录当前剩余时间,onResume时用剩余时长创建计时器即可,不需要每次都用完整的1分钟时长。
内容的提问来源于stack exchange,提问作者user16240688
相关产品推荐
相关产品推荐

