Android Studio中Level1的CountDownTimer切换至下一个Activity后仍持续运行的问题求助
解决CountDownTimer跳转Activity后持续运行的问题
问题出在CountDownTimer不受Activity生命周期自动管理,当你跳转到新Activity后,原来的Timer实例还会在后台继续执行倒计时,不仅浪费资源,还可能因为原Activity的控件(比如你的tv_timer)已经被销毁,触发空指针异常。
给你两个关键修改步骤,轻松解决:
1. 将Timer改为Activity成员变量
把原来的局部变量timer提升为Activity的成员变量,这样在Activity的生命周期方法里能访问到它:
public class easyQuiz1 extends AppCompatActivity { private CountDownTimer timer; // 成员变量 private int secondsRemaining = 30; private TextView tv_timer; // 记得初始化这个控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); tv_timer = findViewById(R.id.tv_timer); // 绑定控件 // 初始化并启动Timer timer = new CountDownTimer(30000, 1000) { @Override public void onTick(long l) { secondsRemaining--; tv_timer.setText(Integer.toString(secondsRemaining) + "sec"); } @Override public void onFinish() { Intent intent = new Intent(easyQuiz1.this, TryAgain1.class); startActivity(intent); finish(); } }.start(); } }
2. 在Activity销毁时取消Timer
重写Activity的onDestroy()方法,在这里调用timer.cancel(),确保Activity被销毁时Timer也随之停止:
@Override protected void onDestroy() { super.onDestroy(); // 判空避免空指针 if (timer != null) { timer.cancel(); } }
额外补充:主动跳转时提前停止Timer
如果是通过按钮主动跳转到下一关,建议在跳转前就手动取消Timer,避免不必要的倒计时执行:
// 示例:跳转下一关的按钮点击事件 findViewById(R.id.btn_next_level).setOnClickListener(v -> { if (timer != null) { timer.cancel(); } Intent intent = new Intent(easyQuiz1.this, NextLevelActivity.class); startActivity(intent); finish(); });
这样修改后,不管是Activity自动销毁还是主动跳转,Timer都会被及时停止,不会再后台乱跑了。
内容的提问来源于stack exchange,提问作者Joshua Apurillo
相关产品推荐
相关产品推荐

